From 4210fdcb279afac2f4d99a7f4a3a658303a8a19a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 11 Oct 2022 16:36:39 +0200 Subject: [PATCH 01/62] feat: console rewrite --- .gitignore | 1 + Dockerfile | 2 + app/controllers/web/console.php | 623 ++------------------------------ app/controllers/web/home.php | 229 ------------ app/http.php | 2 +- 5 files changed, 37 insertions(+), 820 deletions(-) diff --git a/.gitignore b/.gitignore index a0e910f79..906bba876 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /.vscode/ /vendor/ +/console /node_modules/ /tests/resources/storage/ /tests/resources/functions/**/code.tar.gz diff --git a/Dockerfile b/Dockerfile index a7cae3850..83e7980dc 100755 --- a/Dockerfile +++ b/Dockerfile @@ -20,6 +20,7 @@ COPY package-lock.json /usr/local/src/ COPY package.json /usr/local/src/ COPY gulpfile.js /usr/local/src/ COPY public /usr/local/src/public +COPY console /usr/local/src/console RUN npm ci RUN npm run build @@ -313,6 +314,7 @@ COPY ./bin /usr/local/bin COPY ./docs /usr/src/code/docs COPY ./public/fonts /usr/src/code/public/fonts COPY ./public/images /usr/src/code/public/images +COPY ./console /usr/src/code/console COPY ./src /usr/src/code/src # Set Volumes diff --git a/app/controllers/web/console.php b/app/controllers/web/console.php index 9c62ec38a..ff36be94d 100644 --- a/app/controllers/web/console.php +++ b/app/controllers/web/console.php @@ -1,609 +1,52 @@ groups(['console']) - ->inject('layout') - ->action(function (View $layout) { - $layout - ->setParam('description', 'Appwrite Console allows you to easily manage, monitor, and control your entire backend API and tools.') - ->setParam('analytics', 'UA-26264668-5') - ; - }); +$fallbackRoute = function (Response $response) { + $fallback = file_get_contents(__DIR__ . '/../../../console/index.html'); + $response->html($fallback); +}; -App::shutdown() - ->groups(['console']) - ->inject('response') - ->inject('layout') - ->action(function (Response $response, View $layout) { - $header = new View(__DIR__ . '/../../views/console/comps/header.phtml'); - $footer = new View(__DIR__ . '/../../views/console/comps/footer.phtml'); - - $header - ->setParam('regions', Config::getParam('regions', [])) - ; - - $footer - ->setParam('home', App::getEnv('_APP_HOME', '')) - ->setParam('version', App::getEnv('_APP_VERSION', 'UNKNOWN')) - ; - - $layout - ->setParam('header', [$header]) - ->setParam('footer', [$footer]) - ; - - $response->html($layout->render()); - }); - -App::get('/error/:code') - ->groups(['web', 'console']) +App::get('/') + ->groups(['web']) ->label('permission', 'public') ->label('scope', 'home') - ->param('code', null, new \Utopia\Validator\Numeric(), 'Valid status code number', false) - ->inject('layout') - ->action(function (int $code, View $layout) { - - $page = new View(__DIR__ . '/../../views/error.phtml'); - - $page - ->setParam('code', $code) - ; - - $layout - ->setParam('title', APP_NAME . ' - Error') - ->setParam('body', $page); - }); - -App::get('/console') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/index.phtml'); - - $page - ->setParam('home', App::getEnv('_APP_HOME', '')) - ; - - $layout - ->setParam('title', APP_NAME . ' - Console') - ->setParam('body', $page); - }); - -App::get('/console/account') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/account/index.phtml'); - - $cc = new View(__DIR__ . '/../../views/console/forms/credit-card.phtml'); - - $page - ->setParam('cc', $cc) - ; - - $layout - ->setParam('title', 'Account - ' . APP_NAME) - ->setParam('body', $page); - }); - -App::get('/console/notifications') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/v1/console/notifications/index.phtml'); - - $layout - ->setParam('title', APP_NAME . ' - Notifications') - ->setParam('body', $page); - }); - -App::get('/console/home') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/home/index.phtml'); - $page - ->setParam('usageStatsEnabled', App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled'); - $layout - ->setParam('title', APP_NAME . ' - Console') - ->setParam('body', $page); - }); - -App::get('/console/settings') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $target = new Domain(App::getEnv('_APP_DOMAIN_TARGET', '')); - - $page = new View(__DIR__ . '/../../views/console/settings/index.phtml'); - - $page->setParam('services', array_filter(Config::getParam('services'), fn($element) => $element['optional'])) - ->setParam('customDomainsEnabled', ($target->isKnown() && !$target->isTest())) - ->setParam('customDomainsTarget', $target->get()) - ->setParam('smtpEnabled', (!empty(App::getEnv('_APP_SMTP_HOST')))) - ; - - $layout - ->setParam('title', APP_NAME . ' - Settings') - ->setParam('body', $page); - }); - -App::get('/console/webhooks') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/webhooks/index.phtml'); - - $page->setParam('events', Config::getParam('events', [])); - - $layout - ->setParam('title', APP_NAME . ' - Webhooks') - ->setParam('body', $page); - }); - -App::get('/console/webhooks/webhook') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->param('id', '', new UID(), 'Webhook unique ID.') - ->inject('layout') - ->action(function (string $id, View $layout) { - - $page = new View(__DIR__ . '/../../views/console/webhooks/webhook.phtml'); - - $page - ->setParam('events', Config::getParam('events', [])) - ->setParam('new', false) - ; - - $layout - ->setParam('title', APP_NAME . ' - Webhooks') - ->setParam('body', $page); - }); - -App::get('/console/webhooks/webhook/new') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/webhooks/webhook.phtml'); - - $page - ->setParam('events', Config::getParam('events', [])) - ->setParam('new', true) - ; - - $layout - ->setParam('title', APP_NAME . ' - Webhooks') - ->setParam('body', $page); - }); - -App::get('/console/keys') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $scopes = array_keys(Config::getParam('scopes')); - $page = new View(__DIR__ . '/../../views/console/keys/index.phtml'); - - $page->setParam('scopes', $scopes); - - $layout - ->setParam('title', APP_NAME . ' - API Keys') - ->setParam('body', $page); - }); - -App::get('/console/databases') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/databases/index.phtml'); - - $layout - ->setParam('title', APP_NAME . ' - Database') - ->setParam('body', $page); - }); - -App::get('/console/databases/database') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->param('id', '', new UID(), 'Database unique ID.') ->inject('response') - ->inject('layout') - ->action(function (string $id, Response $response, View $layout) { + ->action($fallbackRoute); - $logs = new View(__DIR__ . '/../../views/console/comps/logs.phtml'); - - $logs - ->setParam('interval', App::getEnv('_APP_MAINTENANCE_RETENTION_AUDIT', 0)) - ->setParam('method', 'database.listLogs') - ->setParam('params', [ - 'database-id' => '{{router.params.id}}', - ]) - ; - - $page = new View(__DIR__ . '/../../views/console/databases/database.phtml'); - - $page->setParam('logs', $logs); - - $layout - ->setParam('title', APP_NAME . ' - Database') - ->setParam('body', $page) - ; - - $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Expires', 0) - ->addHeader('Pragma', 'no-cache') - ; - }); - -App::get('/console/databases/collection') - ->groups(['web', 'console']) +App::get('/console/*') + ->groups(['web']) ->label('permission', 'public') - ->label('scope', 'console') - ->param('id', '', new UID(), 'Collection unique ID.') + ->label('scope', 'home') ->inject('response') - ->inject('layout') - ->action(function (string $id, Response $response, View $layout) { + ->action($fallbackRoute); - $logs = new View(__DIR__ . '/../../views/console/comps/logs.phtml'); - - $logs - ->setParam('interval', App::getEnv('_APP_MAINTENANCE_RETENTION_AUDIT', 0)) - ->setParam('method', 'databases.listCollectionLogs') - ->setParam('params', [ - 'collection-id' => '{{router.params.id}}', - 'database-id' => '{{router.params.databaseId}}' - ]) - ; - - $permissions = new View(__DIR__ . '/../../views/console/comps/permissions-matrix.phtml'); - $permissions - ->setParam('method', 'databases.getCollection') - ->setParam('events', 'load,databases.updateCollection') - ->setParam('form', 'collectionPermissions') - ->setParam('data', 'project-collection') - ->setParam('params', [ - 'collection-id' => '{{router.params.id}}', - 'database-id' => '{{router.params.databaseId}}' - ]); - - $page = new View(__DIR__ . '/../../views/console/databases/collection.phtml'); - - $page - ->setParam('permissions', $permissions) - ->setParam('logs', $logs) - ; - - $layout - ->setParam('title', APP_NAME . ' - Database Collection') - ->setParam('body', $page) - ; - - $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Expires', 0) - ->addHeader('Pragma', 'no-cache') - ; - }); - -App::get('/console/databases/document') - ->groups(['web', 'console']) +App::get('/invite') + ->groups(['web']) ->label('permission', 'public') - ->label('scope', 'console') - ->param('databaseId', '', new UID(), 'Database unique ID.') - ->param('collectionId', '', new UID(), 'Collection unique ID.') - ->inject('layout') - ->action(function (string $databaseId, string $collectionId, View $layout) { - - $logs = new View(__DIR__ . '/../../views/console/comps/logs.phtml'); - $logs - ->setParam('interval', App::getEnv('_APP_MAINTENANCE_RETENTION_AUDIT', 0)) - ->setParam('method', 'databases.listDocumentLogs') - ->setParam('params', [ - 'database-id' => '{{router.params.databaseId}}', - 'collection-id' => '{{router.params.collectionId}}', - 'document-id' => '{{router.params.id}}', - ]) - ; - - $permissions = new View(__DIR__ . '/../../views/console/comps/permissions-matrix.phtml'); - $permissions - ->setParam('method', 'databases.getDocument') - ->setParam('events', 'load,databases.updateDocument') - ->setParam('form', 'documentPermissions') - ->setParam('data', 'project-document') - ->setParam('permissions', [ - Database::PERMISSION_READ, - Database::PERMISSION_UPDATE, - Database::PERMISSION_DELETE, - ]) - ->setParam('params', [ - 'collection-id' => '{{router.params.collectionId}}', - 'database-id' => '{{router.params.databaseId}}', - 'document-id' => '{{router.params.id}}', - ]); - - $page = new View(__DIR__ . '/../../views/console/databases/document.phtml'); - - $page - ->setParam('new', false) - ->setParam('database', $databaseId) - ->setParam('collection', $collectionId) - ->setParam('permissions', $permissions) - ->setParam('logs', $logs) - ; - - $layout - ->setParam('title', APP_NAME . ' - Database Document') - ->setParam('body', $page); - }); - -App::get('/console/databases/document/new') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->param('databaseId', '', new UID(), 'Database unique ID.') - ->param('collectionId', '', new UID(), 'Collection unique ID.') - ->inject('layout') - ->action(function (string $databaseId, string $collectionId, View $layout) { - - $permissions = new View(__DIR__ . '/../../views/console/comps/permissions-matrix.phtml'); - - $permissions - ->setParam('data', 'project-document') - ->setParam('form', 'documentPermissions') - ->setParam('permissions', [ - Database::PERMISSION_READ, - Database::PERMISSION_UPDATE, - Database::PERMISSION_DELETE, - ]) - ->setParam('params', [ - 'collection-id' => '{{router.params.collectionId}}', - 'database-id' => '{{router.params.databaseId}}', - 'document-id' => '{{router.params.id}}', - ]); - - $page = new View(__DIR__ . '/../../views/console/databases/document.phtml'); - - $page - ->setParam('new', true) - ->setParam('database', $databaseId) - ->setParam('collection', $collectionId) - ->setParam('permissions', $permissions) - ->setParam('logs', new View()) - ; - - $layout - ->setParam('title', APP_NAME . ' - Database Document') - ->setParam('body', $page); - }); - -App::get('/console/storage') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/storage/index.phtml'); - - $page - ->setParam('home', App::getEnv('_APP_HOME', 0)) - ->setParam('fileLimit', App::getEnv('_APP_STORAGE_LIMIT', 0)) - ->setParam('fileLimitHuman', Storage::human(App::getEnv('_APP_STORAGE_LIMIT', 0))) - ; - - $layout - ->setParam('title', APP_NAME . ' - Storage') - ->setParam('body', $page); - }); - -App::get('/console/storage/bucket') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->param('id', '', new UID(), 'Bucket unique ID.') + ->label('scope', 'home') ->inject('response') - ->inject('layout') - ->action(function (string $id, Response $response, View $layout) { + ->action($fallbackRoute); - $bucketPermissions = new View(__DIR__ . '/../../views/console/comps/permissions-matrix.phtml'); - $bucketPermissions - ->setParam('method', 'databases.getBucket') - ->setParam('events', 'load,databases.updateBucket') - ->setParam('data', 'project-bucket') - ->setParam('form', 'bucketPermissions') - ->setParam('params', [ - 'bucket-id' => '{{router.params.id}}', - ]); - - $fileCreatePermissions = new View(__DIR__ . '/../../views/console/comps/permissions-matrix.phtml'); - $fileCreatePermissions - ->setParam('form', 'fileCreatePermissions') - ->setParam('permissions', [ - Database::PERMISSION_READ, - Database::PERMISSION_UPDATE, - Database::PERMISSION_DELETE, - ]); - - $fileUpdatePermissions = new View(__DIR__ . '/../../views/console/comps/permissions-matrix.phtml'); - $fileUpdatePermissions - ->setParam('method', 'storage.getFile') - ->setParam('data', 'file') - ->setParam('form', 'fileUpdatePermissions') - ->setParam('permissions', [ - Database::PERMISSION_READ, - Database::PERMISSION_UPDATE, - Database::PERMISSION_DELETE, - ]) - ->setParam('params', [ - 'bucket-id' => '{{router.params.id}}', - ]); - - $page = new View(__DIR__ . '/../../views/console/storage/bucket.phtml'); - $page - ->setParam('home', App::getEnv('_APP_HOME', 0)) - ->setParam('fileLimit', App::getEnv('_APP_STORAGE_LIMIT', 0)) - ->setParam('fileLimitHuman', Storage::human(App::getEnv('_APP_STORAGE_LIMIT', 0))) - ->setParam('bucketPermissions', $bucketPermissions) - ->setParam('fileCreatePermissions', $fileCreatePermissions) - ->setParam('fileUpdatePermissions', $fileUpdatePermissions) - ; - - $layout - ->setParam('title', APP_NAME . ' - Storage Buckets') - ->setParam('body', $page) - ; - - $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Expires', 0) - ->addHeader('Pragma', 'no-cache') - ; - }); - -App::get('/console/users') - ->groups(['web', 'console']) +App::get('/login') + ->groups(['web']) ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/users/index.phtml'); - - $page - ->setParam('auth', Config::getParam('auth')) - ->setParam('providers', Config::getParam('providers')) - ->setParam('smtpEnabled', (!empty(App::getEnv('_APP_SMTP_HOST')))) - ; - - $layout - ->setParam('title', APP_NAME . ' - Users') - ->setParam('body', $page); - }); - -App::get('/console/users/user') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/users/user.phtml'); - - $layout - ->setParam('title', APP_NAME . ' - User') - ->setParam('body', $page); - }); - -App::get('/console/users/teams/team') - ->groups(['web', 'console']) - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/console/users/team.phtml'); - - $layout - ->setParam('title', APP_NAME . ' - Team') - ->setParam('body', $page); - }); - -App::get('/console/functions') - ->groups(['web', 'console']) - ->desc('Platform console project functions') - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - $page = new View(__DIR__ . '/../../views/console/functions/index.phtml'); - - $page - ->setParam('runtimes', Config::getParam('runtimes')) - ; - - $layout - ->setParam('title', APP_NAME . ' - Functions') - ->setParam('body', $page); - }); - -App::get('/console/functions/function') - ->groups(['web', 'console']) - ->desc('Platform console project function') - ->label('permission', 'public') - ->label('scope', 'console') - ->inject('layout') - ->action(function (View $layout) { - $page = new View(__DIR__ . '/../../views/console/functions/function.phtml'); - - $page - ->setParam('events', Config::getParam('events', [])) - ->setParam('fileLimit', App::getEnv('_APP_STORAGE_LIMIT', 0)) - ->setParam('fileLimitHuman', Storage::human(App::getEnv('_APP_STORAGE_LIMIT', 0))) - ->setParam('timeout', (int) App::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)) - ->setParam('usageStatsEnabled', App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled'); - ; - - $layout - ->setParam('title', APP_NAME . ' - Function') - ->setParam('body', $page); - }); - -App::get('/console/version') - ->groups(['web', 'console']) - ->desc('Check for new version') - ->label('permission', 'public') - ->label('scope', 'console') + ->label('scope', 'home') ->inject('response') - ->action(function ($response) { - try { - $version = \json_decode(@\file_get_contents(App::getEnv('_APP_HOME', 'http://localhost') . '/v1/health/version'), true); + ->action($fallbackRoute); + +App::get('/recover') + ->groups(['web']) + ->label('permission', 'public') + ->label('scope', 'home') + ->inject('response') + ->action($fallbackRoute); + +App::get('/register') + ->groups(['web']) + ->label('permission', 'public') + ->label('scope', 'home') + ->inject('response') + ->action($fallbackRoute); - if ($version && isset($version['version'])) { - return $response->json(['version' => $version['version']]); - } else { - throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Failed to check for a newer version'); - } - } catch (\Throwable $th) { - throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Failed to check for a newer version'); - } - }); diff --git a/app/controllers/web/home.php b/app/controllers/web/home.php index 90828a1d5..04785fb33 100644 --- a/app/controllers/web/home.php +++ b/app/controllers/web/home.php @@ -1,236 +1,8 @@ groups(['home']) - ->inject('layout') - ->action(function (View $layout) { - $header = new View(__DIR__ . '/../../views/home/comps/header.phtml'); - $footer = new View(__DIR__ . '/../../views/home/comps/footer.phtml'); - - $footer - ->setParam('version', App::getEnv('_APP_VERSION', 'UNKNOWN')) - ; - - $layout - ->setParam('title', APP_NAME) - ->setParam('description', '') - ->setParam('class', 'home') - ->setParam('platforms', Config::getParam('platforms')) - ->setParam('header', [$header]) - ->setParam('footer', [$footer]) - ; - }); - -App::shutdown() - ->groups(['home']) - ->inject('response') - ->inject('layout') - ->action(function (Response $response, View $layout) { - $response->html($layout->render()); - }); - -App::get('/') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('response') - ->inject('dbForConsole') - ->inject('project') - ->action(function (Response $response, Database $dbForConsole, Document $project) { - - $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Expires', 0) - ->addHeader('Pragma', 'no-cache') - ; - - if ('console' === $project->getId() || $project->isEmpty()) { - $whitelistRoot = App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled'); - - if ($whitelistRoot !== 'disabled') { - $count = $dbForConsole->count('users', [], 1); - - if ($count !== 0) { - return $response->redirect('/auth/signin'); - } - } - } - - $response->redirect('/auth/signup'); - }); - -App::get('/auth/signin') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/signin.phtml'); - - $page - ->setParam('root', App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled')) - ; - - $layout - ->setParam('title', 'Sign In - ' . APP_NAME) - ->setParam('body', $page); - }); - -App::get('/auth/signup') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/signup.phtml'); - - $page - ->setParam('root', App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled')) - ; - - $layout - ->setParam('title', 'Sign Up - ' . APP_NAME) - ->setParam('body', $page); - }); - -App::get('/auth/recovery') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/recovery.phtml'); - - $page - ->setParam('smtpEnabled', (!empty(App::getEnv('_APP_SMTP_HOST')))) - ; - - $layout - ->setParam('title', 'Password Recovery - ' . APP_NAME) - ->setParam('body', $page); - }); - -App::get('/auth/confirm') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/confirm.phtml'); - - $layout - ->setParam('title', 'Account Confirmation - ' . APP_NAME) - ->setParam('body', $page); - }); - -App::get('/auth/join') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/join.phtml'); - - $layout - ->setParam('title', 'Invitation - ' . APP_NAME) - ->setParam('body', $page); - }); - -App::get('/auth/recovery/reset') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/recovery/reset.phtml'); - - $layout - ->setParam('title', 'Password Reset - ' . APP_NAME) - ->setParam('body', $page); - }); - -App::get('/auth/oauth2/success') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/oauth2.phtml'); - - $layout - ->setParam('title', APP_NAME) - ->setParam('body', $page) - ->setParam('header', []) - ->setParam('footer', []) - ; - }); - -App::get('/auth/magic-url') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/magicURL.phtml'); - - $layout - ->setParam('title', APP_NAME) - ->setParam('body', $page) - ->setParam('header', []) - ->setParam('footer', []) - ; - }); - -App::get('/auth/oauth2/failure') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('layout') - ->action(function (View $layout) { - - $page = new View(__DIR__ . '/../../views/home/auth/oauth2.phtml'); - - $layout - ->setParam('title', APP_NAME) - ->setParam('body', $page) - ->setParam('header', []) - ->setParam('footer', []) - ; - }); - -App::get('/error/:code') - ->groups(['web', 'home']) - ->label('permission', 'public') - ->label('scope', 'home') - ->param('code', null, new \Utopia\Validator\Numeric(), 'Valid status code number', false) - ->inject('layout') - ->action(function (int $code, View $layout) { - - $page = new View(__DIR__ . '/../../views/error.phtml'); - - $page - ->setParam('code', $code) - ; - - $layout - ->setParam('title', 'Error' . ' - ' . APP_NAME) - ->setParam('body', $page); - }); App::get('/versions') ->desc('Get Version') @@ -238,7 +10,6 @@ App::get('/versions') ->label('scope', 'public') ->inject('response') ->action(function (Response $response) { - $platforms = Config::getParam('platforms'); $versions = [ diff --git a/app/http.php b/app/http.php index 5e23514fe..d2f154f92 100644 --- a/app/http.php +++ b/app/http.php @@ -51,7 +51,7 @@ $http->on('AfterReload', function ($server, $workerId) { Console::success('Reload completed...'); }); -Files::load(__DIR__ . '/../public'); +Files::load(__DIR__ . '/../console'); include __DIR__ . '/controllers/general.php'; From 7f256e5d066e327bb0e004d9b990f53462feef5c Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 26 Oct 2022 21:23:02 +0200 Subject: [PATCH 02/62] feat: add console repo --- .gitmodules | 4 + Dockerfile | 273 ++++++++++++++++++++++++++-------------------------- app/console | 1 + 3 files changed, 140 insertions(+), 138 deletions(-) create mode 100644 .gitmodules create mode 160000 app/console diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..77ce8b822 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "app/console"] + path = app/console + url = https://github.com/appwrite/console.git + branch = feat-layout-endpoints \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 83e7980dc..922d4917c 100755 --- a/Dockerfile +++ b/Dockerfile @@ -9,18 +9,15 @@ COPY composer.lock /usr/local/src/ COPY composer.json /usr/local/src/ RUN composer install --ignore-platform-reqs --optimize-autoloader \ - --no-plugins --no-scripts --prefer-dist \ - `if [ "$TESTING" != "true" ]; then echo "--no-dev"; fi` + --no-plugins --no-scripts --prefer-dist \ + `if [ "$TESTING" != "true" ]; then echo "--no-dev"; fi` FROM node:16.14.2-alpine3.15 as node -WORKDIR /usr/local/src/ -COPY package-lock.json /usr/local/src/ -COPY package.json /usr/local/src/ -COPY gulpfile.js /usr/local/src/ -COPY public /usr/local/src/public -COPY console /usr/local/src/console +COPY app/console /usr/local/src/console + +WORKDIR /usr/local/src/console RUN npm ci RUN npm run build @@ -31,12 +28,12 @@ ARG DEBUG=false ENV DEBUG=$DEBUG ENV PHP_REDIS_VERSION=5.3.7 \ - PHP_MONGODB_VERSION=1.13.0 \ - PHP_SWOOLE_VERSION=v4.8.10 \ - PHP_IMAGICK_VERSION=3.7.0 \ - PHP_YAML_VERSION=2.2.2 \ - PHP_MAXMINDDB_VERSION=v1.11.0 \ - PHP_ZSTD_VERSION="4504e4186e79b197cfcb75d4d09aa47ef7d92fe9 " + PHP_MONGODB_VERSION=1.13.0 \ + PHP_SWOOLE_VERSION=v4.8.10 \ + PHP_IMAGICK_VERSION=3.7.0 \ + PHP_YAML_VERSION=2.2.2 \ + PHP_MAXMINDDB_VERSION=v1.11.0 \ + PHP_ZSTD_VERSION="4504e4186e79b197cfcb75d4d09aa47ef7d92fe9 " RUN \ apk add --no-cache --virtual .deps \ @@ -78,14 +75,14 @@ RUN \ ## Swoole Debugger setup RUN if [ "$DEBUG" == "true" ]; then \ - cd /tmp && \ - apk add boost-dev && \ - git clone --depth 1 https://github.com/swoole/yasd && \ - cd yasd && \ - phpize && \ - ./configure && \ - make && make install && \ - cd ..;\ + cd /tmp && \ + apk add boost-dev && \ + git clone --depth 1 https://github.com/swoole/yasd && \ + cd yasd && \ + phpize && \ + ./configure && \ + make && make install && \ + cd ..;\ fi ## Imagick Extension @@ -175,88 +172,88 @@ ENV DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} ENV DOCKER_COMPOSE_VERSION=v2.5.0 ENV _APP_SERVER=swoole \ - _APP_ENV=production \ - _APP_LOCALE=en \ - _APP_WORKER_PER_CORE= \ - _APP_DOMAIN=localhost \ - _APP_DOMAIN_TARGET=localhost \ - _APP_HOME=https://appwrite.io \ - _APP_EDITION=community \ - _APP_CONSOLE_WHITELIST_ROOT=enabled \ - _APP_CONSOLE_WHITELIST_EMAILS= \ - _APP_CONSOLE_WHITELIST_IPS= \ - _APP_SYSTEM_EMAIL_NAME= \ - _APP_SYSTEM_EMAIL_ADDRESS= \ - _APP_SYSTEM_RESPONSE_FORMAT= \ - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS= \ - _APP_OPTIONS_ABUSE=enabled \ - _APP_OPTIONS_FORCE_HTTPS=disabled \ - _APP_OPENSSL_KEY_V1=your-secret-key \ - _APP_STORAGE_LIMIT=10000000 \ - _APP_STORAGE_ANTIVIRUS=enabled \ - _APP_STORAGE_ANTIVIRUS_HOST=clamav \ - _APP_STORAGE_ANTIVIRUS_PORT=3310 \ - _APP_STORAGE_DEVICE=Local \ - _APP_STORAGE_S3_ACCESS_KEY= \ - _APP_STORAGE_S3_SECRET= \ - _APP_STORAGE_S3_REGION= \ - _APP_STORAGE_S3_BUCKET= \ - _APP_STORAGE_DO_SPACES_ACCESS_KEY= \ - _APP_STORAGE_DO_SPACES_SECRET= \ - _APP_STORAGE_DO_SPACES_REGION= \ - _APP_STORAGE_DO_SPACES_BUCKET= \ - _APP_STORAGE_BACKBLAZE_ACCESS_KEY= \ - _APP_STORAGE_BACKBLAZE_SECRET= \ - _APP_STORAGE_BACKBLAZE_REGION= \ - _APP_STORAGE_BACKBLAZE_BUCKET= \ - _APP_STORAGE_LINODE_ACCESS_KEY= \ - _APP_STORAGE_LINODE_SECRET= \ - _APP_STORAGE_LINODE_REGION= \ - _APP_STORAGE_LINODE_BUCKET= \ - _APP_STORAGE_WASABI_ACCESS_KEY= \ - _APP_STORAGE_WASABI_SECRET= \ - _APP_STORAGE_WASABI_REGION= \ - _APP_STORAGE_WASABI_BUCKET= \ - _APP_REDIS_HOST=redis \ - _APP_REDIS_PORT=6379 \ - _APP_DB_HOST=mariadb \ - _APP_DB_PORT=3306 \ - _APP_DB_USER=root \ - _APP_DB_PASS=password \ - _APP_DB_SCHEMA=appwrite \ - _APP_INFLUXDB_HOST=influxdb \ - _APP_INFLUXDB_PORT=8086 \ - _APP_STATSD_HOST=telegraf \ - _APP_STATSD_PORT=8125 \ - _APP_SMTP_HOST= \ - _APP_SMTP_PORT= \ - _APP_SMTP_SECURE= \ - _APP_SMTP_USERNAME= \ - _APP_SMTP_PASSWORD= \ - _APP_SMS_PROVIDER= \ - _APP_SMS_FROM= \ - _APP_FUNCTIONS_SIZE_LIMIT=30000000 \ - _APP_FUNCTIONS_TIMEOUT=900 \ - _APP_FUNCTIONS_CONTAINERS=10 \ - _APP_FUNCTIONS_CPUS=1 \ - _APP_FUNCTIONS_MEMORY=128 \ - _APP_FUNCTIONS_MEMORY_SWAP=128 \ - _APP_EXECUTOR_SECRET=a-random-secret \ - _APP_EXECUTOR_HOST=http://appwrite-executor/v1 \ - _APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes \ - _APP_SETUP=self-hosted \ - _APP_VERSION=$VERSION \ - _APP_USAGE_STATS=enabled \ - _APP_USAGE_TIMESERIES_INTERVAL=30 \ - _APP_USAGE_DATABASE_INTERVAL=900 \ - # 14 Days = 1209600 s - _APP_MAINTENANCE_RETENTION_EXECUTION=1209600 \ - _APP_MAINTENANCE_RETENTION_AUDIT=1209600 \ - # 1 Day = 86400 s - _APP_MAINTENANCE_RETENTION_ABUSE=86400 \ - _APP_MAINTENANCE_INTERVAL=86400 \ - _APP_LOGGING_PROVIDER= \ - _APP_LOGGING_CONFIG= + _APP_ENV=production \ + _APP_LOCALE=en \ + _APP_WORKER_PER_CORE= \ + _APP_DOMAIN=localhost \ + _APP_DOMAIN_TARGET=localhost \ + _APP_HOME=https://appwrite.io \ + _APP_EDITION=community \ + _APP_CONSOLE_WHITELIST_ROOT=enabled \ + _APP_CONSOLE_WHITELIST_EMAILS= \ + _APP_CONSOLE_WHITELIST_IPS= \ + _APP_SYSTEM_EMAIL_NAME= \ + _APP_SYSTEM_EMAIL_ADDRESS= \ + _APP_SYSTEM_RESPONSE_FORMAT= \ + _APP_SYSTEM_SECURITY_EMAIL_ADDRESS= \ + _APP_OPTIONS_ABUSE=enabled \ + _APP_OPTIONS_FORCE_HTTPS=disabled \ + _APP_OPENSSL_KEY_V1=your-secret-key \ + _APP_STORAGE_LIMIT=10000000 \ + _APP_STORAGE_ANTIVIRUS=enabled \ + _APP_STORAGE_ANTIVIRUS_HOST=clamav \ + _APP_STORAGE_ANTIVIRUS_PORT=3310 \ + _APP_STORAGE_DEVICE=Local \ + _APP_STORAGE_S3_ACCESS_KEY= \ + _APP_STORAGE_S3_SECRET= \ + _APP_STORAGE_S3_REGION= \ + _APP_STORAGE_S3_BUCKET= \ + _APP_STORAGE_DO_SPACES_ACCESS_KEY= \ + _APP_STORAGE_DO_SPACES_SECRET= \ + _APP_STORAGE_DO_SPACES_REGION= \ + _APP_STORAGE_DO_SPACES_BUCKET= \ + _APP_STORAGE_BACKBLAZE_ACCESS_KEY= \ + _APP_STORAGE_BACKBLAZE_SECRET= \ + _APP_STORAGE_BACKBLAZE_REGION= \ + _APP_STORAGE_BACKBLAZE_BUCKET= \ + _APP_STORAGE_LINODE_ACCESS_KEY= \ + _APP_STORAGE_LINODE_SECRET= \ + _APP_STORAGE_LINODE_REGION= \ + _APP_STORAGE_LINODE_BUCKET= \ + _APP_STORAGE_WASABI_ACCESS_KEY= \ + _APP_STORAGE_WASABI_SECRET= \ + _APP_STORAGE_WASABI_REGION= \ + _APP_STORAGE_WASABI_BUCKET= \ + _APP_REDIS_HOST=redis \ + _APP_REDIS_PORT=6379 \ + _APP_DB_HOST=mariadb \ + _APP_DB_PORT=3306 \ + _APP_DB_USER=root \ + _APP_DB_PASS=password \ + _APP_DB_SCHEMA=appwrite \ + _APP_INFLUXDB_HOST=influxdb \ + _APP_INFLUXDB_PORT=8086 \ + _APP_STATSD_HOST=telegraf \ + _APP_STATSD_PORT=8125 \ + _APP_SMTP_HOST= \ + _APP_SMTP_PORT= \ + _APP_SMTP_SECURE= \ + _APP_SMTP_USERNAME= \ + _APP_SMTP_PASSWORD= \ + _APP_SMS_PROVIDER= \ + _APP_SMS_FROM= \ + _APP_FUNCTIONS_SIZE_LIMIT=30000000 \ + _APP_FUNCTIONS_TIMEOUT=900 \ + _APP_FUNCTIONS_CONTAINERS=10 \ + _APP_FUNCTIONS_CPUS=1 \ + _APP_FUNCTIONS_MEMORY=128 \ + _APP_FUNCTIONS_MEMORY_SWAP=128 \ + _APP_EXECUTOR_SECRET=a-random-secret \ + _APP_EXECUTOR_HOST=http://appwrite-executor/v1 \ + _APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes \ + _APP_SETUP=self-hosted \ + _APP_VERSION=$VERSION \ + _APP_USAGE_STATS=enabled \ + _APP_USAGE_TIMESERIES_INTERVAL=30 \ + _APP_USAGE_DATABASE_INTERVAL=900 \ + # 14 Days = 1209600 s + _APP_MAINTENANCE_RETENTION_EXECUTION=1209600 \ + _APP_MAINTENANCE_RETENTION_AUDIT=1209600 \ + # 1 Day = 86400 s + _APP_MAINTENANCE_RETENTION_ABUSE=86400 \ + _APP_MAINTENANCE_INTERVAL=86400 \ + _APP_LOGGING_PROVIDER= \ + _APP_LOGGING_CONFIG= RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone @@ -292,13 +289,13 @@ RUN \ RUN \ if [ "$DEBUG" == "true" ]; then \ - apk add boost boost-dev; \ + apk add boost boost-dev; \ fi WORKDIR /usr/src/code COPY --from=composer /usr/local/src/vendor /usr/src/code/vendor -COPY --from=node /usr/local/src/public/dist /usr/src/code/public/dist +COPY --from=node /usr/local/src/console/build /usr/src/code/console COPY --from=swoole /usr/local/lib/php/extensions/no-debug-non-zts-20200930/swoole.so /usr/local/lib/php/extensions/no-debug-non-zts-20200930/yasd.so* /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ COPY --from=redis /usr/local/lib/php/extensions/no-debug-non-zts-20200930/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ COPY --from=imagick /usr/local/lib/php/extensions/no-debug-non-zts-20200930/imagick.so /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ @@ -319,41 +316,41 @@ COPY ./src /usr/src/code/src # Set Volumes RUN mkdir -p /storage/uploads && \ - mkdir -p /storage/cache && \ - mkdir -p /storage/config && \ - mkdir -p /storage/certificates && \ - mkdir -p /storage/functions && \ - mkdir -p /storage/debug && \ - chown -Rf www-data.www-data /storage/uploads && chmod -Rf 0755 /storage/uploads && \ - chown -Rf www-data.www-data /storage/cache && chmod -Rf 0755 /storage/cache && \ - chown -Rf www-data.www-data /storage/config && chmod -Rf 0755 /storage/config && \ - chown -Rf www-data.www-data /storage/certificates && chmod -Rf 0755 /storage/certificates && \ - chown -Rf www-data.www-data /storage/functions && chmod -Rf 0755 /storage/functions && \ - chown -Rf www-data.www-data /storage/debug && chmod -Rf 0755 /storage/debug + mkdir -p /storage/cache && \ + mkdir -p /storage/config && \ + mkdir -p /storage/certificates && \ + mkdir -p /storage/functions && \ + mkdir -p /storage/debug && \ + chown -Rf www-data.www-data /storage/uploads && chmod -Rf 0755 /storage/uploads && \ + chown -Rf www-data.www-data /storage/cache && chmod -Rf 0755 /storage/cache && \ + chown -Rf www-data.www-data /storage/config && chmod -Rf 0755 /storage/config && \ + chown -Rf www-data.www-data /storage/certificates && chmod -Rf 0755 /storage/certificates && \ + chown -Rf www-data.www-data /storage/functions && chmod -Rf 0755 /storage/functions && \ + chown -Rf www-data.www-data /storage/debug && chmod -Rf 0755 /storage/debug # Executables RUN chmod +x /usr/local/bin/doctor && \ - chmod +x /usr/local/bin/maintenance && \ - chmod +x /usr/local/bin/usage && \ - chmod +x /usr/local/bin/install && \ - chmod +x /usr/local/bin/migrate && \ - chmod +x /usr/local/bin/realtime && \ - chmod +x /usr/local/bin/executor && \ - chmod +x /usr/local/bin/schedule && \ - chmod +x /usr/local/bin/sdks && \ - chmod +x /usr/local/bin/specs && \ - chmod +x /usr/local/bin/ssl && \ - chmod +x /usr/local/bin/test && \ - chmod +x /usr/local/bin/vars && \ - chmod +x /usr/local/bin/worker-audits && \ - chmod +x /usr/local/bin/worker-certificates && \ - chmod +x /usr/local/bin/worker-databases && \ - chmod +x /usr/local/bin/worker-deletes && \ - chmod +x /usr/local/bin/worker-functions && \ - chmod +x /usr/local/bin/worker-builds && \ - chmod +x /usr/local/bin/worker-mails && \ - chmod +x /usr/local/bin/worker-messaging && \ - chmod +x /usr/local/bin/worker-webhooks + chmod +x /usr/local/bin/maintenance && \ + chmod +x /usr/local/bin/usage && \ + chmod +x /usr/local/bin/install && \ + chmod +x /usr/local/bin/migrate && \ + chmod +x /usr/local/bin/realtime && \ + chmod +x /usr/local/bin/executor && \ + chmod +x /usr/local/bin/schedule && \ + chmod +x /usr/local/bin/sdks && \ + chmod +x /usr/local/bin/specs && \ + chmod +x /usr/local/bin/ssl && \ + chmod +x /usr/local/bin/test && \ + chmod +x /usr/local/bin/vars && \ + chmod +x /usr/local/bin/worker-audits && \ + chmod +x /usr/local/bin/worker-certificates && \ + chmod +x /usr/local/bin/worker-databases && \ + chmod +x /usr/local/bin/worker-deletes && \ + chmod +x /usr/local/bin/worker-functions && \ + chmod +x /usr/local/bin/worker-builds && \ + chmod +x /usr/local/bin/worker-mails && \ + chmod +x /usr/local/bin/worker-messaging && \ + chmod +x /usr/local/bin/worker-webhooks # Letsencrypt Permissions RUN mkdir -p /etc/letsencrypt/live/ && chmod -Rf 755 /etc/letsencrypt/live/ diff --git a/app/console b/app/console new file mode 160000 index 000000000..4be303e3c --- /dev/null +++ b/app/console @@ -0,0 +1 @@ +Subproject commit 4be303e3c754b7fba367669bd82b194c811836c0 From 0049a7656537269c6c7e6c8a34b4960c856bb684 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 31 Oct 2022 09:53:36 +0100 Subject: [PATCH 03/62] feat: submodule --- .gitmodules | 4 +++ app/controllers/web/console.php | 51 ++++++--------------------------- composer.json | 2 +- composer.lock | 33 +++++++++++---------- 4 files changed, 32 insertions(+), 58 deletions(-) create mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..bb712443a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ + [submodule "console"] + path = app/console + url = https://github.com/appwrite/console.git + branch = main \ No newline at end of file diff --git a/app/controllers/web/console.php b/app/controllers/web/console.php index ff36be94d..8001a58d0 100644 --- a/app/controllers/web/console.php +++ b/app/controllers/web/console.php @@ -3,50 +3,17 @@ use Appwrite\Utopia\Response; use Utopia\App; -$fallbackRoute = function (Response $response) { - $fallback = file_get_contents(__DIR__ . '/../../../console/index.html'); - $response->html($fallback); -}; - App::get('/') + ->alias('/console/*') + ->alias('/invite') + ->alias('/login') + ->alias('/recover') + ->alias('/register') ->groups(['web']) ->label('permission', 'public') ->label('scope', 'home') ->inject('response') - ->action($fallbackRoute); - -App::get('/console/*') - ->groups(['web']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('response') - ->action($fallbackRoute); - -App::get('/invite') - ->groups(['web']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('response') - ->action($fallbackRoute); - -App::get('/login') - ->groups(['web']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('response') - ->action($fallbackRoute); - -App::get('/recover') - ->groups(['web']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('response') - ->action($fallbackRoute); - -App::get('/register') - ->groups(['web']) - ->label('permission', 'public') - ->label('scope', 'home') - ->inject('response') - ->action($fallbackRoute); - + ->action(function (Response $response) { + $fallback = file_get_contents(__DIR__ . '/../../../console/index.html'); + $response->html($fallback); + }); diff --git a/composer.json b/composer.json index 4ee7392ef..334120958 100644 --- a/composer.json +++ b/composer.json @@ -52,7 +52,7 @@ "utopia-php/database": "0.26.*", "utopia-php/preloader": "0.2.*", "utopia-php/domains": "1.1.*", - "utopia-php/framework": "0.22.*", + "utopia-php/framework": "dev-feat-multiple-aliases as 0.22.9", "utopia-php/image": "0.5.*", "utopia-php/locale": "0.4.*", "utopia-php/logger": "0.3.*", diff --git a/composer.lock b/composer.lock index de7d1042c..128532594 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fa760a49c4911c4a1a4ae0b8881738aa", + "content-hash": "d8785bcc235caa7fe9312614f053d0cd", "packages": [ { "name": "adhocore/jwt", @@ -2172,16 +2172,16 @@ }, { "name": "utopia-php/framework", - "version": "0.22.1", + "version": "dev-feat-multiple-aliases", "source": { "type": "git", "url": "https://github.com/utopia-php/framework.git", - "reference": "9f35d36ed4b8fa1c92962c77ef02b49c2f5919df" + "reference": "37637cb22a30e6660a0886befef4d6a5e657fc48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/framework/zipball/9f35d36ed4b8fa1c92962c77ef02b49c2f5919df", - "reference": "9f35d36ed4b8fa1c92962c77ef02b49c2f5919df", + "url": "https://api.github.com/repos/utopia-php/framework/zipball/37637cb22a30e6660a0886befef4d6a5e657fc48", + "reference": "37637cb22a30e6660a0886befef4d6a5e657fc48", "shasum": "" }, "require": { @@ -2201,12 +2201,6 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Eldad Fux", - "email": "eldad@appwrite.io" - } - ], "description": "A simple, light and advanced PHP framework", "keywords": [ "framework", @@ -2215,9 +2209,9 @@ ], "support": { "issues": "https://github.com/utopia-php/framework/issues", - "source": "https://github.com/utopia-php/framework/tree/0.22.1" + "source": "https://github.com/utopia-php/framework/tree/feat-multiple-aliases" }, - "time": "2022-10-07T14:51:40+00:00" + "time": "2022-10-20T21:06:21+00:00" }, { "name": "utopia-php/image", @@ -5411,9 +5405,18 @@ "time": "2022-09-28T08:42:51+00:00" } ], - "aliases": [], + "aliases": [ + { + "package": "utopia-php/framework", + "version": "dev-feat-multiple-aliases", + "alias": "0.22.9", + "alias_normalized": "0.22.9.0" + } + ], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "utopia-php/framework": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { From d8717a4a16cc908222e96a2a4e6eb726d2c1ff88 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 31 Oct 2022 11:50:19 +0100 Subject: [PATCH 04/62] fix: console build --- .gitmodules | 8 ++++---- Dockerfile | 11 +++-------- app/console | 1 + app/controllers/web/console.php | 4 ++-- 4 files changed, 10 insertions(+), 14 deletions(-) create mode 160000 app/console diff --git a/.gitmodules b/.gitmodules index bb712443a..ad823b3d9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ - [submodule "console"] - path = app/console - url = https://github.com/appwrite/console.git - branch = main \ No newline at end of file +[submodule "app/console"] + path = app/console + url = https://github.com/appwrite/console.git + branch = main diff --git a/Dockerfile b/Dockerfile index 83e7980dc..273f18440 100755 --- a/Dockerfile +++ b/Dockerfile @@ -14,13 +14,9 @@ RUN composer install --ignore-platform-reqs --optimize-autoloader \ FROM node:16.14.2-alpine3.15 as node -WORKDIR /usr/local/src/ +COPY app/console /usr/local/src/console -COPY package-lock.json /usr/local/src/ -COPY package.json /usr/local/src/ -COPY gulpfile.js /usr/local/src/ -COPY public /usr/local/src/public -COPY console /usr/local/src/console +WORKDIR /usr/local/src/console/ RUN npm ci RUN npm run build @@ -298,7 +294,7 @@ RUN \ WORKDIR /usr/src/code COPY --from=composer /usr/local/src/vendor /usr/src/code/vendor -COPY --from=node /usr/local/src/public/dist /usr/src/code/public/dist +COPY --from=node /usr/local/src/console/build /usr/src/code/console COPY --from=swoole /usr/local/lib/php/extensions/no-debug-non-zts-20200930/swoole.so /usr/local/lib/php/extensions/no-debug-non-zts-20200930/yasd.so* /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ COPY --from=redis /usr/local/lib/php/extensions/no-debug-non-zts-20200930/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ COPY --from=imagick /usr/local/lib/php/extensions/no-debug-non-zts-20200930/imagick.so /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ @@ -314,7 +310,6 @@ COPY ./bin /usr/local/bin COPY ./docs /usr/src/code/docs COPY ./public/fonts /usr/src/code/public/fonts COPY ./public/images /usr/src/code/public/images -COPY ./console /usr/src/code/console COPY ./src /usr/src/code/src # Set Volumes diff --git a/app/console b/app/console new file mode 160000 index 000000000..1a65be11d --- /dev/null +++ b/app/console @@ -0,0 +1 @@ +Subproject commit 1a65be11d12fddb0f887bceb3b25044f6e81f5bd diff --git a/app/controllers/web/console.php b/app/controllers/web/console.php index 8001a58d0..fa4f76a9d 100644 --- a/app/controllers/web/console.php +++ b/app/controllers/web/console.php @@ -3,8 +3,8 @@ use Appwrite\Utopia\Response; use Utopia\App; -App::get('/') - ->alias('/console/*') +App::get('/console/*') + ->alias('/') ->alias('/invite') ->alias('/login') ->alias('/recover') From d34359fd494625d7bd67c65c4b516800255dc8f7 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 31 Oct 2022 14:54:15 +0000 Subject: [PATCH 05/62] Implement Variable Session Duration --- app/config/collections.php | 11 ++++++++ app/config/specs/open-api3-latest-client.json | 2 +- .../specs/open-api3-latest-console.json | 2 +- app/config/specs/open-api3-latest-server.json | 2 +- app/config/specs/swagger2-latest-client.json | 2 +- app/config/specs/swagger2-latest-console.json | 2 +- app/config/specs/swagger2-latest-server.json | 2 +- app/controllers/api/account.php | 26 ++++++++++++------- app/controllers/api/projects.php | 13 ++++++++-- app/controllers/api/teams.php | 6 +++-- app/init.php | 1 + app/tasks/maintenance.php | 2 +- .../Utopia/Response/Model/Project.php | 6 +++++ tests/e2e/Scopes/ProjectCustom.php | 1 + 14 files changed, 58 insertions(+), 20 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index d8f65da78..7f51d9412 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -633,6 +633,17 @@ $collections = [ 'array' => false, 'filters' => [], ], + [ + '$id' => ID::custom('sessionDuration'), + 'type' => Database::VAR_INTEGER, + 'format' => '', + 'size' => 32, + 'signed' => true, + 'required' => false, + 'default' => 525600, // 1 Year + 'array' => false, + 'filters' => [], + ], [ '$id' => ID::custom('services'), 'type' => Database::VAR_STRING, diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index 83607db0e..7749cfbec 100644 --- a/app/config/specs/open-api3-latest-client.json +++ b/app/config/specs/open-api3-latest-client.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":null},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":null}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"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](\/docs\/admin).","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's executions. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's files. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\r\n\r\nIn admin mode, this endpoint returns a list of all the teams in the current project. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index 97ed0e158..9d7e32e7b 100644 --- a/app/config/specs/open-api3-latest-console.json +++ b/app/config/specs/open-api3-latest-console.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":null},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":null}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabases"}}}}},"x-appwrite":{"method":"getUsage","weight":113,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"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](\/docs\/admin).","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listDocumentLogs","weight":110,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listCollectionLogs","weight":88,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageCollection"}}}}},"x-appwrite":{"method":"getCollectionUsage","weight":115,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":82,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabase"}}}}},"x-appwrite":{"method":"getDatabaseUsage","weight":114,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getUsage","weight":225,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's executions. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getFunctionUsage","weight":224,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/projectList"}}}}},"x-appwrite":{"method":"list","weight":136,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","tags":["projects"],"description":"","responses":{"201":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"create","weight":135,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","x-example":"[TEAM_ID]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId"]}}}}}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"get","weight":137,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"update","weight":139,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Project","operationId":"projectsDelete","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":144,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthLimit","weight":142,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","x-example":0}},"required":["limit"]}}}}}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthStatus","weight":143,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"schema":{"type":"string","x-example":"email-password"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","x-example":false}},"required":["status"]}}}}}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domainList"}}}}},"x-appwrite":{"method":"listDomains","weight":162,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","tags":["projects"],"description":"","responses":{"201":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"createDomain","weight":161,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","x-example":null}},"required":["domain"]}}}}}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"getDomain","weight":163,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":165,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"updateDomainVerification","weight":164,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/keyList"}}}}},"x-appwrite":{"method":"listKeys","weight":152,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","tags":["projects"],"description":"","responses":{"201":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"createKey","weight":151,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"getKey","weight":153,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"updateKey","weight":154,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":155,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateOAuth2","weight":141,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","x-example":"[SECRET]"}},"required":["provider"]}}}}}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platformList"}}}}},"x-appwrite":{"method":"listPlatforms","weight":157,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","tags":["projects"],"description":"","responses":{"201":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"createPlatform","weight":156,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","x-example":null}},"required":["type","name"]}}}}}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"getPlatform","weight":158,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"updatePlatform","weight":159,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","x-example":null}},"required":["name"]}}}}},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":160,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateServiceStatus","weight":140,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","x-example":"account"},"status":{"type":"boolean","description":"Service status.","x-example":false}},"required":["service","status"]}}}}}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageProject"}}}}},"x-appwrite":{"method":"getUsage","weight":138,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhookList"}}}}},"x-appwrite":{"method":"listWebhooks","weight":146,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"createWebhook","weight":145,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"getWebhook","weight":147,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhook","weight":148,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":150,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhookSignature","weight":149,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's files. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageStorage"}}}}},"x-appwrite":{"method":"getUsage","weight":179,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageBuckets"}}}}},"x-appwrite":{"method":"getBucketUsage","weight":180,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\r\n\r\nIn admin mode, this endpoint returns a list of all the teams in the current project. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":192,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":null},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageUsers"}}}}},"x-appwrite":{"method":"getUsage","weight":219,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"provider","description":"Provider Name.","required":false,"schema":{"type":"string","x-example":"email","default":""},"in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":null}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"$ref":"#\/components\/schemas\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"metricList":{"description":"Metric List","type":"object","properties":{"total":{"type":"integer","description":"Total number of metrics documents that matched your query.","x-example":5,"format":"int32"},"metrics":{"type":"array","description":"List of metrics.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":""}},"required":["total","metrics"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"platforms":{"type":"array","description":"List of Platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":{}},"providerAmazonAppid":{"type":"string","description":"Amazon OAuth app ID.","x-example":"123247283472834787438"},"providerAmazonSecret":{"type":"string","description":"Amazon OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAppleAppid":{"type":"string","description":"Apple OAuth app ID.","x-example":"123247283472834787438"},"providerAppleSecret":{"type":"string","description":"Apple OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuth0Appid":{"type":"string","description":"Auth0 OAuth app ID.","x-example":"123247283472834787438"},"providerAuth0Secret":{"type":"string","description":"Auth0 OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuthentikAppid":{"type":"string","description":"Authentik OAuth app ID.","x-example":"123247283472834787438"},"providerAuthentikSecret":{"type":"string","description":"Authentik OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAutodeskAppid":{"type":"string","description":"Autodesk OAuth app ID.","x-example":"123247283472834787438"},"providerAutodeskSecret":{"type":"string","description":"Autodesk OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitbucketAppid":{"type":"string","description":"BitBucket OAuth app ID.","x-example":"123247283472834787438"},"providerBitbucketSecret":{"type":"string","description":"BitBucket OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitlyAppid":{"type":"string","description":"Bitly OAuth app ID.","x-example":"123247283472834787438"},"providerBitlySecret":{"type":"string","description":"Bitly OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBoxAppid":{"type":"string","description":"Box OAuth app ID.","x-example":"123247283472834787438"},"providerBoxSecret":{"type":"string","description":"Box OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDailymotionAppid":{"type":"string","description":"Dailymotion OAuth app ID.","x-example":"123247283472834787438"},"providerDailymotionSecret":{"type":"string","description":"Dailymotion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDiscordAppid":{"type":"string","description":"Discord OAuth app ID.","x-example":"123247283472834787438"},"providerDiscordSecret":{"type":"string","description":"Discord OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDisqusAppid":{"type":"string","description":"Disqus OAuth app ID.","x-example":"123247283472834787438"},"providerDisqusSecret":{"type":"string","description":"Disqus OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDropboxAppid":{"type":"string","description":"Dropbox OAuth app ID.","x-example":"123247283472834787438"},"providerDropboxSecret":{"type":"string","description":"Dropbox OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerEtsyAppid":{"type":"string","description":"Etsy OAuth app ID.","x-example":"123247283472834787438"},"providerEtsySecret":{"type":"string","description":"Etsy OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerFacebookAppid":{"type":"string","description":"Facebook OAuth app ID.","x-example":"123247283472834787438"},"providerFacebookSecret":{"type":"string","description":"Facebook OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGithubAppid":{"type":"string","description":"GitHub OAuth app ID.","x-example":"123247283472834787438"},"providerGithubSecret":{"type":"string","description":"GitHub OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGitlabAppid":{"type":"string","description":"GitLab OAuth app ID.","x-example":"123247283472834787438"},"providerGitlabSecret":{"type":"string","description":"GitLab OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGoogleAppid":{"type":"string","description":"Google OAuth app ID.","x-example":"123247283472834787438"},"providerGoogleSecret":{"type":"string","description":"Google OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerLinkedinAppid":{"type":"string","description":"LinkedIn OAuth app ID.","x-example":"123247283472834787438"},"providerLinkedinSecret":{"type":"string","description":"LinkedIn OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMicrosoftAppid":{"type":"string","description":"Microsoft OAuth app ID.","x-example":"123247283472834787438"},"providerMicrosoftSecret":{"type":"string","description":"Microsoft OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerNotionAppid":{"type":"string","description":"Notion OAuth app ID.","x-example":"123247283472834787438"},"providerNotionSecret":{"type":"string","description":"Notion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerOktaAppid":{"type":"string","description":"Okta OAuth app ID.","x-example":"123247283472834787438"},"providerOktaSecret":{"type":"string","description":"Okta OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalSandboxAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSandboxSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPodioAppid":{"type":"string","description":"Podio OAuth app ID.","x-example":"123247283472834787438"},"providerPodioSecret":{"type":"string","description":"Podio OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSalesforceAppid":{"type":"string","description":"Salesforce OAuth app ID.","x-example":"123247283472834787438"},"providerSalesforceSecret":{"type":"string","description":"Salesforce OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSlackAppid":{"type":"string","description":"Slack OAuth app ID.","x-example":"123247283472834787438"},"providerSlackSecret":{"type":"string","description":"Slack OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSpotifyAppid":{"type":"string","description":"Spotify OAuth app ID.","x-example":"123247283472834787438"},"providerSpotifySecret":{"type":"string","description":"Spotify OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerStripeAppid":{"type":"string","description":"Stripe OAuth app ID.","x-example":"123247283472834787438"},"providerStripeSecret":{"type":"string","description":"Stripe OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftBoxAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftBoxSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTwitchAppid":{"type":"string","description":"Twitch OAuth app ID.","x-example":"123247283472834787438"},"providerTwitchSecret":{"type":"string","description":"Twitch OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerWordpressAppid":{"type":"string","description":"WordPress OAuth app ID.","x-example":"123247283472834787438"},"providerWordpressSecret":{"type":"string","description":"WordPress OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYahooAppid":{"type":"string","description":"Yahoo OAuth app ID.","x-example":"123247283472834787438"},"providerYahooSecret":{"type":"string","description":"Yahoo OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYammerAppid":{"type":"string","description":"Yammer OAuth app ID.","x-example":"123247283472834787438"},"providerYammerSecret":{"type":"string","description":"Yammer OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYandexAppid":{"type":"string","description":"Yandex OAuth app ID.","x-example":"123247283472834787438"},"providerYandexSecret":{"type":"string","description":"Yandex OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerZoomAppid":{"type":"string","description":"Zoom OAuth app ID.","x-example":"123247283472834787438"},"providerZoomSecret":{"type":"string","description":"Zoom OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMockAppid":{"type":"string","description":"Mock OAuth app ID.","x-example":"123247283472834787438"},"providerMockSecret":{"type":"string","description":"Mock OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authLimit","platforms","webhooks","keys","domains","providerAmazonAppid","providerAmazonSecret","providerAppleAppid","providerAppleSecret","providerAuth0Appid","providerAuth0Secret","providerAuthentikAppid","providerAuthentikSecret","providerAutodeskAppid","providerAutodeskSecret","providerBitbucketAppid","providerBitbucketSecret","providerBitlyAppid","providerBitlySecret","providerBoxAppid","providerBoxSecret","providerDailymotionAppid","providerDailymotionSecret","providerDiscordAppid","providerDiscordSecret","providerDisqusAppid","providerDisqusSecret","providerDropboxAppid","providerDropboxSecret","providerEtsyAppid","providerEtsySecret","providerFacebookAppid","providerFacebookSecret","providerGithubAppid","providerGithubSecret","providerGitlabAppid","providerGitlabSecret","providerGoogleAppid","providerGoogleSecret","providerLinkedinAppid","providerLinkedinSecret","providerMicrosoftAppid","providerMicrosoftSecret","providerNotionAppid","providerNotionSecret","providerOktaAppid","providerOktaSecret","providerPaypalAppid","providerPaypalSecret","providerPaypalSandboxAppid","providerPaypalSandboxSecret","providerPodioAppid","providerPodioSecret","providerSalesforceAppid","providerSalesforceSecret","providerSlackAppid","providerSlackSecret","providerSpotifyAppid","providerSpotifySecret","providerStripeAppid","providerStripeSecret","providerTradeshiftAppid","providerTradeshiftSecret","providerTradeshiftBoxAppid","providerTradeshiftBoxSecret","providerTwitchAppid","providerTwitchSecret","providerWordpressAppid","providerWordpressSecret","providerYahooAppid","providerYahooSecret","providerYammerAppid","providerYammerSecret","providerYandexAppid","providerYandexSecret","providerZoomAppid","providerZoomSecret","providerMockAppid","providerMockSecret","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collections":{"type":"array","description":"Aggregated stats for number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","requests","network","executions","documents","collections","users","storage"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabases"}}}}},"x-appwrite":{"method":"getUsage","weight":113,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listDocumentLogs","weight":110,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listCollectionLogs","weight":88,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageCollection"}}}}},"x-appwrite":{"method":"getCollectionUsage","weight":115,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":82,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabase"}}}}},"x-appwrite":{"method":"getDatabaseUsage","weight":114,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getUsage","weight":225,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getFunctionUsage","weight":224,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/projectList"}}}}},"x-appwrite":{"method":"list","weight":136,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","tags":["projects"],"description":"","responses":{"201":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"create","weight":135,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","x-example":"[TEAM_ID]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"},"sessionDuration":{"type":"integer","description":"Session duration in minutes. Defaults to 1 year","x-example":null}},"required":["projectId","name","teamId"]}}}}}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"get","weight":137,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"update","weight":139,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"},"sessionDuration":{"type":"integer","description":"Project session length in minutes. Max length: 525600 minutes.","x-example":null}},"required":["name"]}}}}},"delete":{"summary":"Delete Project","operationId":"projectsDelete","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":144,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthLimit","weight":142,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","x-example":0}},"required":["limit"]}}}}}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthStatus","weight":143,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"schema":{"type":"string","x-example":"email-password"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","x-example":false}},"required":["status"]}}}}}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domainList"}}}}},"x-appwrite":{"method":"listDomains","weight":162,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","tags":["projects"],"description":"","responses":{"201":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"createDomain","weight":161,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","x-example":null}},"required":["domain"]}}}}}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"getDomain","weight":163,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":165,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"updateDomainVerification","weight":164,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/keyList"}}}}},"x-appwrite":{"method":"listKeys","weight":152,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","tags":["projects"],"description":"","responses":{"201":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"createKey","weight":151,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"getKey","weight":153,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"updateKey","weight":154,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":155,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateOAuth2","weight":141,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","x-example":"[SECRET]"}},"required":["provider"]}}}}}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platformList"}}}}},"x-appwrite":{"method":"listPlatforms","weight":157,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","tags":["projects"],"description":"","responses":{"201":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"createPlatform","weight":156,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","x-example":null}},"required":["type","name"]}}}}}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"getPlatform","weight":158,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"updatePlatform","weight":159,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","x-example":null}},"required":["name"]}}}}},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":160,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateServiceStatus","weight":140,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","x-example":"account"},"status":{"type":"boolean","description":"Service status.","x-example":false}},"required":["service","status"]}}}}}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageProject"}}}}},"x-appwrite":{"method":"getUsage","weight":138,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhookList"}}}}},"x-appwrite":{"method":"listWebhooks","weight":146,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"createWebhook","weight":145,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"getWebhook","weight":147,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhook","weight":148,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":150,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhookSignature","weight":149,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageStorage"}}}}},"x-appwrite":{"method":"getUsage","weight":179,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageBuckets"}}}}},"x-appwrite":{"method":"getBucketUsage","weight":180,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":192,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageUsers"}}}}},"x-appwrite":{"method":"getUsage","weight":219,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"provider","description":"Provider Name.","required":false,"schema":{"type":"string","x-example":"email","default":""},"in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"$ref":"#\/components\/schemas\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"metricList":{"description":"Metric List","type":"object","properties":{"total":{"type":"integer","description":"Total number of metrics documents that matched your query.","x-example":5,"format":"int32"},"metrics":{"type":"array","description":"List of metrics.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":""}},"required":["total","metrics"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"sessionDuration":{"type":"string","description":"Session duration in minutes.","x-example":"30"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"platforms":{"type":"array","description":"List of Platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":{}},"providerAmazonAppid":{"type":"string","description":"Amazon OAuth app ID.","x-example":"123247283472834787438"},"providerAmazonSecret":{"type":"string","description":"Amazon OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAppleAppid":{"type":"string","description":"Apple OAuth app ID.","x-example":"123247283472834787438"},"providerAppleSecret":{"type":"string","description":"Apple OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuth0Appid":{"type":"string","description":"Auth0 OAuth app ID.","x-example":"123247283472834787438"},"providerAuth0Secret":{"type":"string","description":"Auth0 OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuthentikAppid":{"type":"string","description":"Authentik OAuth app ID.","x-example":"123247283472834787438"},"providerAuthentikSecret":{"type":"string","description":"Authentik OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAutodeskAppid":{"type":"string","description":"Autodesk OAuth app ID.","x-example":"123247283472834787438"},"providerAutodeskSecret":{"type":"string","description":"Autodesk OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitbucketAppid":{"type":"string","description":"BitBucket OAuth app ID.","x-example":"123247283472834787438"},"providerBitbucketSecret":{"type":"string","description":"BitBucket OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitlyAppid":{"type":"string","description":"Bitly OAuth app ID.","x-example":"123247283472834787438"},"providerBitlySecret":{"type":"string","description":"Bitly OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBoxAppid":{"type":"string","description":"Box OAuth app ID.","x-example":"123247283472834787438"},"providerBoxSecret":{"type":"string","description":"Box OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDailymotionAppid":{"type":"string","description":"Dailymotion OAuth app ID.","x-example":"123247283472834787438"},"providerDailymotionSecret":{"type":"string","description":"Dailymotion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDiscordAppid":{"type":"string","description":"Discord OAuth app ID.","x-example":"123247283472834787438"},"providerDiscordSecret":{"type":"string","description":"Discord OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDisqusAppid":{"type":"string","description":"Disqus OAuth app ID.","x-example":"123247283472834787438"},"providerDisqusSecret":{"type":"string","description":"Disqus OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDropboxAppid":{"type":"string","description":"Dropbox OAuth app ID.","x-example":"123247283472834787438"},"providerDropboxSecret":{"type":"string","description":"Dropbox OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerEtsyAppid":{"type":"string","description":"Etsy OAuth app ID.","x-example":"123247283472834787438"},"providerEtsySecret":{"type":"string","description":"Etsy OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerFacebookAppid":{"type":"string","description":"Facebook OAuth app ID.","x-example":"123247283472834787438"},"providerFacebookSecret":{"type":"string","description":"Facebook OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGithubAppid":{"type":"string","description":"GitHub OAuth app ID.","x-example":"123247283472834787438"},"providerGithubSecret":{"type":"string","description":"GitHub OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGitlabAppid":{"type":"string","description":"GitLab OAuth app ID.","x-example":"123247283472834787438"},"providerGitlabSecret":{"type":"string","description":"GitLab OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGoogleAppid":{"type":"string","description":"Google OAuth app ID.","x-example":"123247283472834787438"},"providerGoogleSecret":{"type":"string","description":"Google OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerLinkedinAppid":{"type":"string","description":"LinkedIn OAuth app ID.","x-example":"123247283472834787438"},"providerLinkedinSecret":{"type":"string","description":"LinkedIn OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMicrosoftAppid":{"type":"string","description":"Microsoft OAuth app ID.","x-example":"123247283472834787438"},"providerMicrosoftSecret":{"type":"string","description":"Microsoft OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerNotionAppid":{"type":"string","description":"Notion OAuth app ID.","x-example":"123247283472834787438"},"providerNotionSecret":{"type":"string","description":"Notion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerOktaAppid":{"type":"string","description":"Okta OAuth app ID.","x-example":"123247283472834787438"},"providerOktaSecret":{"type":"string","description":"Okta OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalSandboxAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSandboxSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPodioAppid":{"type":"string","description":"Podio OAuth app ID.","x-example":"123247283472834787438"},"providerPodioSecret":{"type":"string","description":"Podio OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSalesforceAppid":{"type":"string","description":"Salesforce OAuth app ID.","x-example":"123247283472834787438"},"providerSalesforceSecret":{"type":"string","description":"Salesforce OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSlackAppid":{"type":"string","description":"Slack OAuth app ID.","x-example":"123247283472834787438"},"providerSlackSecret":{"type":"string","description":"Slack OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSpotifyAppid":{"type":"string","description":"Spotify OAuth app ID.","x-example":"123247283472834787438"},"providerSpotifySecret":{"type":"string","description":"Spotify OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerStripeAppid":{"type":"string","description":"Stripe OAuth app ID.","x-example":"123247283472834787438"},"providerStripeSecret":{"type":"string","description":"Stripe OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftBoxAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftBoxSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTwitchAppid":{"type":"string","description":"Twitch OAuth app ID.","x-example":"123247283472834787438"},"providerTwitchSecret":{"type":"string","description":"Twitch OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerWordpressAppid":{"type":"string","description":"WordPress OAuth app ID.","x-example":"123247283472834787438"},"providerWordpressSecret":{"type":"string","description":"WordPress OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYahooAppid":{"type":"string","description":"Yahoo OAuth app ID.","x-example":"123247283472834787438"},"providerYahooSecret":{"type":"string","description":"Yahoo OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYammerAppid":{"type":"string","description":"Yammer OAuth app ID.","x-example":"123247283472834787438"},"providerYammerSecret":{"type":"string","description":"Yammer OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYandexAppid":{"type":"string","description":"Yandex OAuth app ID.","x-example":"123247283472834787438"},"providerYandexSecret":{"type":"string","description":"Yandex OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerZoomAppid":{"type":"string","description":"Zoom OAuth app ID.","x-example":"123247283472834787438"},"providerZoomSecret":{"type":"string","description":"Zoom OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMockAppid":{"type":"string","description":"Mock OAuth app ID.","x-example":"123247283472834787438"},"providerMockSecret":{"type":"string","description":"Mock OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","sessionDuration","authLimit","platforms","webhooks","keys","domains","providerAmazonAppid","providerAmazonSecret","providerAppleAppid","providerAppleSecret","providerAuth0Appid","providerAuth0Secret","providerAuthentikAppid","providerAuthentikSecret","providerAutodeskAppid","providerAutodeskSecret","providerBitbucketAppid","providerBitbucketSecret","providerBitlyAppid","providerBitlySecret","providerBoxAppid","providerBoxSecret","providerDailymotionAppid","providerDailymotionSecret","providerDiscordAppid","providerDiscordSecret","providerDisqusAppid","providerDisqusSecret","providerDropboxAppid","providerDropboxSecret","providerEtsyAppid","providerEtsySecret","providerFacebookAppid","providerFacebookSecret","providerGithubAppid","providerGithubSecret","providerGitlabAppid","providerGitlabSecret","providerGoogleAppid","providerGoogleSecret","providerLinkedinAppid","providerLinkedinSecret","providerMicrosoftAppid","providerMicrosoftSecret","providerNotionAppid","providerNotionSecret","providerOktaAppid","providerOktaSecret","providerPaypalAppid","providerPaypalSecret","providerPaypalSandboxAppid","providerPaypalSandboxSecret","providerPodioAppid","providerPodioSecret","providerSalesforceAppid","providerSalesforceSecret","providerSlackAppid","providerSlackSecret","providerSpotifyAppid","providerSpotifySecret","providerStripeAppid","providerStripeSecret","providerTradeshiftAppid","providerTradeshiftSecret","providerTradeshiftBoxAppid","providerTradeshiftBoxSecret","providerTwitchAppid","providerTwitchSecret","providerWordpressAppid","providerWordpressSecret","providerYahooAppid","providerYahooSecret","providerYammerAppid","providerYammerSecret","providerYandexAppid","providerYandexSecret","providerZoomAppid","providerZoomSecret","providerMockAppid","providerMockSecret","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"collections":{"type":"array","description":"Aggregated stats for number of collections.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metricList"},"x-example":{}}},"required":["range","requests","network","executions","documents","collections","users","storage"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index 1e5df8d92..af89c3aa5 100644 --- a/app/config/specs/open-api3-latest-server.json +++ b/app/config/specs/open-api3-latest-server.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":null},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"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](\/docs\/admin).","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's executions. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's files. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\r\n\r\nIn admin mode, this endpoint returns a list of all the teams in the current project. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":null},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":null}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index 26b468c67..860a47329 100644 --- a/app/config/specs/swagger2-latest-client.json +++ b/app/config/specs/swagger2-latest-client.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":null},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":null}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"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](\/docs\/admin).","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's executions. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's files. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\r\n\r\nIn admin mode, this endpoint returns a list of all the teams in the current project. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index 531b8c721..3ff904f11 100644 --- a/app/config/specs/swagger2-latest-console.json +++ b/app/config/specs/swagger2-latest-console.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":null},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":null}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","schema":{"$ref":"#\/definitions\/usageDatabases"}}},"x-appwrite":{"method":"getUsage","weight":113,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"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](\/docs\/admin).","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listDocumentLogs","weight":110,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listCollectionLogs","weight":88,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","schema":{"$ref":"#\/definitions\/usageCollection"}}},"x-appwrite":{"method":"getCollectionUsage","weight":115,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":82,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","schema":{"$ref":"#\/definitions\/usageDatabase"}}},"x-appwrite":{"method":"getDatabaseUsage","weight":114,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getUsage","weight":225,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's executions. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getFunctionUsage","weight":224,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","schema":{"$ref":"#\/definitions\/projectList"}}},"x-appwrite":{"method":"list","weight":136,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"create","weight":135,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","default":null,"x-example":"[TEAM_ID]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId"]}}]}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"get","weight":137,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"update","weight":139,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}]},"delete":{"summary":"Delete Project","operationId":"projectsDelete","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":144,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthLimit","weight":142,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","default":null,"x-example":0}},"required":["limit"]}}]}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthStatus","weight":143,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"type":"string","x-example":"email-password","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","default":null,"x-example":false}},"required":["status"]}}]}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","schema":{"$ref":"#\/definitions\/domainList"}}},"x-appwrite":{"method":"listDomains","weight":162,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"createDomain","weight":161,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","default":null,"x-example":null}},"required":["domain"]}}]}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"getDomain","weight":163,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":165,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"updateDomainVerification","weight":164,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","schema":{"$ref":"#\/definitions\/keyList"}}},"x-appwrite":{"method":"listKeys","weight":152,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"createKey","weight":151,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"getKey","weight":153,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"updateKey","weight":154,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":155,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateOAuth2","weight":141,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","default":null,"x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","default":"","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","default":"","x-example":"[SECRET]"}},"required":["provider"]}}]}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","schema":{"$ref":"#\/definitions\/platformList"}}},"x-appwrite":{"method":"listPlatforms","weight":157,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"createPlatform","weight":156,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","default":null,"x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","default":"","x-example":null}},"required":["type","name"]}}]}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"getPlatform","weight":158,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"updatePlatform","weight":159,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","default":"","x-example":null}},"required":["name"]}}]},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":160,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateServiceStatus","weight":140,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","default":null,"x-example":"account"},"status":{"type":"boolean","description":"Service status.","default":null,"x-example":false}},"required":["service","status"]}}]}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","schema":{"$ref":"#\/definitions\/usageProject"}}},"x-appwrite":{"method":"getUsage","weight":138,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","schema":{"$ref":"#\/definitions\/webhookList"}}},"x-appwrite":{"method":"listWebhooks","weight":146,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"createWebhook","weight":145,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"getWebhook","weight":147,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhook","weight":148,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":150,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhookSignature","weight":149,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's files. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","schema":{"$ref":"#\/definitions\/usageStorage"}}},"x-appwrite":{"method":"getUsage","weight":179,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","schema":{"$ref":"#\/definitions\/usageBuckets"}}},"x-appwrite":{"method":"getBucketUsage","weight":180,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\r\n\r\nIn admin mode, this endpoint returns a list of all the teams in the current project. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":192,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":null},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","schema":{"$ref":"#\/definitions\/usageUsers"}}},"x-appwrite":{"method":"getUsage","weight":219,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"provider","description":"Provider Name.","required":false,"type":"string","x-example":"email","default":"","in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":null}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"type":"object","$ref":"#\/definitions\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"metricList":{"description":"Metric List","type":"object","properties":{"total":{"type":"integer","description":"Total number of metrics documents that matched your query.","x-example":5,"format":"int32"},"metrics":{"type":"array","description":"List of metrics.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":""}},"required":["total","metrics"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"platforms":{"type":"array","description":"List of Platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":{}},"providerAmazonAppid":{"type":"string","description":"Amazon OAuth app ID.","x-example":"123247283472834787438"},"providerAmazonSecret":{"type":"string","description":"Amazon OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAppleAppid":{"type":"string","description":"Apple OAuth app ID.","x-example":"123247283472834787438"},"providerAppleSecret":{"type":"string","description":"Apple OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuth0Appid":{"type":"string","description":"Auth0 OAuth app ID.","x-example":"123247283472834787438"},"providerAuth0Secret":{"type":"string","description":"Auth0 OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuthentikAppid":{"type":"string","description":"Authentik OAuth app ID.","x-example":"123247283472834787438"},"providerAuthentikSecret":{"type":"string","description":"Authentik OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAutodeskAppid":{"type":"string","description":"Autodesk OAuth app ID.","x-example":"123247283472834787438"},"providerAutodeskSecret":{"type":"string","description":"Autodesk OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitbucketAppid":{"type":"string","description":"BitBucket OAuth app ID.","x-example":"123247283472834787438"},"providerBitbucketSecret":{"type":"string","description":"BitBucket OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitlyAppid":{"type":"string","description":"Bitly OAuth app ID.","x-example":"123247283472834787438"},"providerBitlySecret":{"type":"string","description":"Bitly OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBoxAppid":{"type":"string","description":"Box OAuth app ID.","x-example":"123247283472834787438"},"providerBoxSecret":{"type":"string","description":"Box OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDailymotionAppid":{"type":"string","description":"Dailymotion OAuth app ID.","x-example":"123247283472834787438"},"providerDailymotionSecret":{"type":"string","description":"Dailymotion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDiscordAppid":{"type":"string","description":"Discord OAuth app ID.","x-example":"123247283472834787438"},"providerDiscordSecret":{"type":"string","description":"Discord OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDisqusAppid":{"type":"string","description":"Disqus OAuth app ID.","x-example":"123247283472834787438"},"providerDisqusSecret":{"type":"string","description":"Disqus OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDropboxAppid":{"type":"string","description":"Dropbox OAuth app ID.","x-example":"123247283472834787438"},"providerDropboxSecret":{"type":"string","description":"Dropbox OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerEtsyAppid":{"type":"string","description":"Etsy OAuth app ID.","x-example":"123247283472834787438"},"providerEtsySecret":{"type":"string","description":"Etsy OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerFacebookAppid":{"type":"string","description":"Facebook OAuth app ID.","x-example":"123247283472834787438"},"providerFacebookSecret":{"type":"string","description":"Facebook OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGithubAppid":{"type":"string","description":"GitHub OAuth app ID.","x-example":"123247283472834787438"},"providerGithubSecret":{"type":"string","description":"GitHub OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGitlabAppid":{"type":"string","description":"GitLab OAuth app ID.","x-example":"123247283472834787438"},"providerGitlabSecret":{"type":"string","description":"GitLab OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGoogleAppid":{"type":"string","description":"Google OAuth app ID.","x-example":"123247283472834787438"},"providerGoogleSecret":{"type":"string","description":"Google OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerLinkedinAppid":{"type":"string","description":"LinkedIn OAuth app ID.","x-example":"123247283472834787438"},"providerLinkedinSecret":{"type":"string","description":"LinkedIn OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMicrosoftAppid":{"type":"string","description":"Microsoft OAuth app ID.","x-example":"123247283472834787438"},"providerMicrosoftSecret":{"type":"string","description":"Microsoft OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerNotionAppid":{"type":"string","description":"Notion OAuth app ID.","x-example":"123247283472834787438"},"providerNotionSecret":{"type":"string","description":"Notion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerOktaAppid":{"type":"string","description":"Okta OAuth app ID.","x-example":"123247283472834787438"},"providerOktaSecret":{"type":"string","description":"Okta OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalSandboxAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSandboxSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPodioAppid":{"type":"string","description":"Podio OAuth app ID.","x-example":"123247283472834787438"},"providerPodioSecret":{"type":"string","description":"Podio OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSalesforceAppid":{"type":"string","description":"Salesforce OAuth app ID.","x-example":"123247283472834787438"},"providerSalesforceSecret":{"type":"string","description":"Salesforce OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSlackAppid":{"type":"string","description":"Slack OAuth app ID.","x-example":"123247283472834787438"},"providerSlackSecret":{"type":"string","description":"Slack OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSpotifyAppid":{"type":"string","description":"Spotify OAuth app ID.","x-example":"123247283472834787438"},"providerSpotifySecret":{"type":"string","description":"Spotify OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerStripeAppid":{"type":"string","description":"Stripe OAuth app ID.","x-example":"123247283472834787438"},"providerStripeSecret":{"type":"string","description":"Stripe OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftBoxAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftBoxSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTwitchAppid":{"type":"string","description":"Twitch OAuth app ID.","x-example":"123247283472834787438"},"providerTwitchSecret":{"type":"string","description":"Twitch OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerWordpressAppid":{"type":"string","description":"WordPress OAuth app ID.","x-example":"123247283472834787438"},"providerWordpressSecret":{"type":"string","description":"WordPress OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYahooAppid":{"type":"string","description":"Yahoo OAuth app ID.","x-example":"123247283472834787438"},"providerYahooSecret":{"type":"string","description":"Yahoo OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYammerAppid":{"type":"string","description":"Yammer OAuth app ID.","x-example":"123247283472834787438"},"providerYammerSecret":{"type":"string","description":"Yammer OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYandexAppid":{"type":"string","description":"Yandex OAuth app ID.","x-example":"123247283472834787438"},"providerYandexSecret":{"type":"string","description":"Yandex OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerZoomAppid":{"type":"string","description":"Zoom OAuth app ID.","x-example":"123247283472834787438"},"providerZoomSecret":{"type":"string","description":"Zoom OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMockAppid":{"type":"string","description":"Mock OAuth app ID.","x-example":"123247283472834787438"},"providerMockSecret":{"type":"string","description":"Mock OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authLimit","platforms","webhooks","keys","domains","providerAmazonAppid","providerAmazonSecret","providerAppleAppid","providerAppleSecret","providerAuth0Appid","providerAuth0Secret","providerAuthentikAppid","providerAuthentikSecret","providerAutodeskAppid","providerAutodeskSecret","providerBitbucketAppid","providerBitbucketSecret","providerBitlyAppid","providerBitlySecret","providerBoxAppid","providerBoxSecret","providerDailymotionAppid","providerDailymotionSecret","providerDiscordAppid","providerDiscordSecret","providerDisqusAppid","providerDisqusSecret","providerDropboxAppid","providerDropboxSecret","providerEtsyAppid","providerEtsySecret","providerFacebookAppid","providerFacebookSecret","providerGithubAppid","providerGithubSecret","providerGitlabAppid","providerGitlabSecret","providerGoogleAppid","providerGoogleSecret","providerLinkedinAppid","providerLinkedinSecret","providerMicrosoftAppid","providerMicrosoftSecret","providerNotionAppid","providerNotionSecret","providerOktaAppid","providerOktaSecret","providerPaypalAppid","providerPaypalSecret","providerPaypalSandboxAppid","providerPaypalSandboxSecret","providerPodioAppid","providerPodioSecret","providerSalesforceAppid","providerSalesforceSecret","providerSlackAppid","providerSlackSecret","providerSpotifyAppid","providerSpotifySecret","providerStripeAppid","providerStripeSecret","providerTradeshiftAppid","providerTradeshiftSecret","providerTradeshiftBoxAppid","providerTradeshiftBoxSecret","providerTwitchAppid","providerTwitchSecret","providerWordpressAppid","providerWordpressSecret","providerYahooAppid","providerYahooSecret","providerYammerAppid","providerYammerSecret","providerYandexAppid","providerYandexSecret","providerZoomAppid","providerZoomSecret","providerMockAppid","providerMockSecret","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collections":{"type":"array","description":"Aggregated stats for number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","requests","network","executions","documents","collections","users","storage"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","schema":{"$ref":"#\/definitions\/usageDatabases"}}},"x-appwrite":{"method":"getUsage","weight":113,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listDocumentLogs","weight":110,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listCollectionLogs","weight":88,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","schema":{"$ref":"#\/definitions\/usageCollection"}}},"x-appwrite":{"method":"getCollectionUsage","weight":115,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":82,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","schema":{"$ref":"#\/definitions\/usageDatabase"}}},"x-appwrite":{"method":"getDatabaseUsage","weight":114,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getUsage","weight":225,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getFunctionUsage","weight":224,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","schema":{"$ref":"#\/definitions\/projectList"}}},"x-appwrite":{"method":"list","weight":136,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"create","weight":135,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","default":null,"x-example":"[TEAM_ID]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"},"sessionDuration":{"type":"integer","description":"Session duration in minutes. Defaults to 1 year","default":525600,"x-example":null}},"required":["projectId","name","teamId"]}}]}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"get","weight":137,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"update","weight":139,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"},"sessionDuration":{"type":"integer","description":"Project session length in minutes. Max length: 525600 minutes.","default":null,"x-example":null}},"required":["name"]}}]},"delete":{"summary":"Delete Project","operationId":"projectsDelete","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":144,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthLimit","weight":142,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","default":null,"x-example":0}},"required":["limit"]}}]}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthStatus","weight":143,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"type":"string","x-example":"email-password","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","default":null,"x-example":false}},"required":["status"]}}]}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","schema":{"$ref":"#\/definitions\/domainList"}}},"x-appwrite":{"method":"listDomains","weight":162,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"createDomain","weight":161,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","default":null,"x-example":null}},"required":["domain"]}}]}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"getDomain","weight":163,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":165,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"updateDomainVerification","weight":164,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","schema":{"$ref":"#\/definitions\/keyList"}}},"x-appwrite":{"method":"listKeys","weight":152,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"createKey","weight":151,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"getKey","weight":153,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"updateKey","weight":154,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":155,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateOAuth2","weight":141,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","default":null,"x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","default":"","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","default":"","x-example":"[SECRET]"}},"required":["provider"]}}]}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","schema":{"$ref":"#\/definitions\/platformList"}}},"x-appwrite":{"method":"listPlatforms","weight":157,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"createPlatform","weight":156,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","default":null,"x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","default":"","x-example":null}},"required":["type","name"]}}]}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"getPlatform","weight":158,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"updatePlatform","weight":159,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","default":"","x-example":null}},"required":["name"]}}]},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":160,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateServiceStatus","weight":140,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","default":null,"x-example":"account"},"status":{"type":"boolean","description":"Service status.","default":null,"x-example":false}},"required":["service","status"]}}]}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","schema":{"$ref":"#\/definitions\/usageProject"}}},"x-appwrite":{"method":"getUsage","weight":138,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","schema":{"$ref":"#\/definitions\/webhookList"}}},"x-appwrite":{"method":"listWebhooks","weight":146,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"createWebhook","weight":145,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"getWebhook","weight":147,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhook","weight":148,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":150,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhookSignature","weight":149,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","schema":{"$ref":"#\/definitions\/usageStorage"}}},"x-appwrite":{"method":"getUsage","weight":179,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","schema":{"$ref":"#\/definitions\/usageBuckets"}}},"x-appwrite":{"method":"getBucketUsage","weight":180,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":192,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","schema":{"$ref":"#\/definitions\/usageUsers"}}},"x-appwrite":{"method":"getUsage","weight":219,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"provider","description":"Provider Name.","required":false,"type":"string","x-example":"email","default":"","in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"type":"object","$ref":"#\/definitions\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"metricList":{"description":"Metric List","type":"object","properties":{"total":{"type":"integer","description":"Total number of metrics documents that matched your query.","x-example":5,"format":"int32"},"metrics":{"type":"array","description":"List of metrics.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":""}},"required":["total","metrics"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"sessionDuration":{"type":"string","description":"Session duration in minutes.","x-example":"30"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"platforms":{"type":"array","description":"List of Platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":{}},"providerAmazonAppid":{"type":"string","description":"Amazon OAuth app ID.","x-example":"123247283472834787438"},"providerAmazonSecret":{"type":"string","description":"Amazon OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAppleAppid":{"type":"string","description":"Apple OAuth app ID.","x-example":"123247283472834787438"},"providerAppleSecret":{"type":"string","description":"Apple OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuth0Appid":{"type":"string","description":"Auth0 OAuth app ID.","x-example":"123247283472834787438"},"providerAuth0Secret":{"type":"string","description":"Auth0 OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAuthentikAppid":{"type":"string","description":"Authentik OAuth app ID.","x-example":"123247283472834787438"},"providerAuthentikSecret":{"type":"string","description":"Authentik OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerAutodeskAppid":{"type":"string","description":"Autodesk OAuth app ID.","x-example":"123247283472834787438"},"providerAutodeskSecret":{"type":"string","description":"Autodesk OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitbucketAppid":{"type":"string","description":"BitBucket OAuth app ID.","x-example":"123247283472834787438"},"providerBitbucketSecret":{"type":"string","description":"BitBucket OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBitlyAppid":{"type":"string","description":"Bitly OAuth app ID.","x-example":"123247283472834787438"},"providerBitlySecret":{"type":"string","description":"Bitly OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerBoxAppid":{"type":"string","description":"Box OAuth app ID.","x-example":"123247283472834787438"},"providerBoxSecret":{"type":"string","description":"Box OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDailymotionAppid":{"type":"string","description":"Dailymotion OAuth app ID.","x-example":"123247283472834787438"},"providerDailymotionSecret":{"type":"string","description":"Dailymotion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDiscordAppid":{"type":"string","description":"Discord OAuth app ID.","x-example":"123247283472834787438"},"providerDiscordSecret":{"type":"string","description":"Discord OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDisqusAppid":{"type":"string","description":"Disqus OAuth app ID.","x-example":"123247283472834787438"},"providerDisqusSecret":{"type":"string","description":"Disqus OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerDropboxAppid":{"type":"string","description":"Dropbox OAuth app ID.","x-example":"123247283472834787438"},"providerDropboxSecret":{"type":"string","description":"Dropbox OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerEtsyAppid":{"type":"string","description":"Etsy OAuth app ID.","x-example":"123247283472834787438"},"providerEtsySecret":{"type":"string","description":"Etsy OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerFacebookAppid":{"type":"string","description":"Facebook OAuth app ID.","x-example":"123247283472834787438"},"providerFacebookSecret":{"type":"string","description":"Facebook OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGithubAppid":{"type":"string","description":"GitHub OAuth app ID.","x-example":"123247283472834787438"},"providerGithubSecret":{"type":"string","description":"GitHub OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGitlabAppid":{"type":"string","description":"GitLab OAuth app ID.","x-example":"123247283472834787438"},"providerGitlabSecret":{"type":"string","description":"GitLab OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerGoogleAppid":{"type":"string","description":"Google OAuth app ID.","x-example":"123247283472834787438"},"providerGoogleSecret":{"type":"string","description":"Google OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerLinkedinAppid":{"type":"string","description":"LinkedIn OAuth app ID.","x-example":"123247283472834787438"},"providerLinkedinSecret":{"type":"string","description":"LinkedIn OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMicrosoftAppid":{"type":"string","description":"Microsoft OAuth app ID.","x-example":"123247283472834787438"},"providerMicrosoftSecret":{"type":"string","description":"Microsoft OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerNotionAppid":{"type":"string","description":"Notion OAuth app ID.","x-example":"123247283472834787438"},"providerNotionSecret":{"type":"string","description":"Notion OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerOktaAppid":{"type":"string","description":"Okta OAuth app ID.","x-example":"123247283472834787438"},"providerOktaSecret":{"type":"string","description":"Okta OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPaypalSandboxAppid":{"type":"string","description":"PayPal OAuth app ID.","x-example":"123247283472834787438"},"providerPaypalSandboxSecret":{"type":"string","description":"PayPal OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerPodioAppid":{"type":"string","description":"Podio OAuth app ID.","x-example":"123247283472834787438"},"providerPodioSecret":{"type":"string","description":"Podio OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSalesforceAppid":{"type":"string","description":"Salesforce OAuth app ID.","x-example":"123247283472834787438"},"providerSalesforceSecret":{"type":"string","description":"Salesforce OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSlackAppid":{"type":"string","description":"Slack OAuth app ID.","x-example":"123247283472834787438"},"providerSlackSecret":{"type":"string","description":"Slack OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerSpotifyAppid":{"type":"string","description":"Spotify OAuth app ID.","x-example":"123247283472834787438"},"providerSpotifySecret":{"type":"string","description":"Spotify OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerStripeAppid":{"type":"string","description":"Stripe OAuth app ID.","x-example":"123247283472834787438"},"providerStripeSecret":{"type":"string","description":"Stripe OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTradeshiftBoxAppid":{"type":"string","description":"Tradeshift OAuth app ID.","x-example":"123247283472834787438"},"providerTradeshiftBoxSecret":{"type":"string","description":"Tradeshift OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerTwitchAppid":{"type":"string","description":"Twitch OAuth app ID.","x-example":"123247283472834787438"},"providerTwitchSecret":{"type":"string","description":"Twitch OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerWordpressAppid":{"type":"string","description":"WordPress OAuth app ID.","x-example":"123247283472834787438"},"providerWordpressSecret":{"type":"string","description":"WordPress OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYahooAppid":{"type":"string","description":"Yahoo OAuth app ID.","x-example":"123247283472834787438"},"providerYahooSecret":{"type":"string","description":"Yahoo OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYammerAppid":{"type":"string","description":"Yammer OAuth app ID.","x-example":"123247283472834787438"},"providerYammerSecret":{"type":"string","description":"Yammer OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerYandexAppid":{"type":"string","description":"Yandex OAuth app ID.","x-example":"123247283472834787438"},"providerYandexSecret":{"type":"string","description":"Yandex OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerZoomAppid":{"type":"string","description":"Zoom OAuth app ID.","x-example":"123247283472834787438"},"providerZoomSecret":{"type":"string","description":"Zoom OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"providerMockAppid":{"type":"string","description":"Mock OAuth app ID.","x-example":"123247283472834787438"},"providerMockSecret":{"type":"string","description":"Mock OAuth secret ID.","x-example":"djsgudsdsewe43434343dd34..."},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","sessionDuration","authLimit","platforms","webhooks","keys","domains","providerAmazonAppid","providerAmazonSecret","providerAppleAppid","providerAppleSecret","providerAuth0Appid","providerAuth0Secret","providerAuthentikAppid","providerAuthentikSecret","providerAutodeskAppid","providerAutodeskSecret","providerBitbucketAppid","providerBitbucketSecret","providerBitlyAppid","providerBitlySecret","providerBoxAppid","providerBoxSecret","providerDailymotionAppid","providerDailymotionSecret","providerDiscordAppid","providerDiscordSecret","providerDisqusAppid","providerDisqusSecret","providerDropboxAppid","providerDropboxSecret","providerEtsyAppid","providerEtsySecret","providerFacebookAppid","providerFacebookSecret","providerGithubAppid","providerGithubSecret","providerGitlabAppid","providerGitlabSecret","providerGoogleAppid","providerGoogleSecret","providerLinkedinAppid","providerLinkedinSecret","providerMicrosoftAppid","providerMicrosoftSecret","providerNotionAppid","providerNotionSecret","providerOktaAppid","providerOktaSecret","providerPaypalAppid","providerPaypalSecret","providerPaypalSandboxAppid","providerPaypalSandboxSecret","providerPodioAppid","providerPodioSecret","providerSalesforceAppid","providerSalesforceSecret","providerSlackAppid","providerSlackSecret","providerSpotifyAppid","providerSpotifySecret","providerStripeAppid","providerStripeSecret","providerTradeshiftAppid","providerTradeshiftSecret","providerTradeshiftBoxAppid","providerTradeshiftBoxSecret","providerTwitchAppid","providerTwitchSecret","providerWordpressAppid","providerWordpressSecret","providerYahooAppid","providerYahooSecret","providerYammerAppid","providerYammerSecret","providerYandexAppid","providerYandexSecret","providerZoomAppid","providerZoomSecret","providerMockAppid","providerMockSecret","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"collections":{"type":"array","description":"Aggregated stats for number of collections.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metricList"},"x-example":{}}},"required":["range","requests","network","executions","documents","collections","users","storage"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index 8cbfe1cea..96097fe41 100644 --- a/app/config/specs/swagger2-latest-server.json +++ b/app/config/specs/swagger2-latest-server.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":null},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"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](\/docs\/admin).","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's executions. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results. On admin mode, this endpoint will return a list of all of the project's files. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\r\n\r\nIn admin mode, this endpoint returns a list of all the teams in the current project. [Learn more about different API modes](\/docs\/admin).","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":null},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":null}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index fb91a4517..177e968f3 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -165,10 +165,11 @@ App::post('/v1/account/sessions/email') ->inject('request') ->inject('response') ->inject('dbForProject') + ->inject('project') ->inject('locale') ->inject('geodb') ->inject('events') - ->action(function (string $email, string $password, Request $request, Response $response, Database $dbForProject, Locale $locale, Reader $geodb, Event $events) { + ->action(function (string $email, string $password, Request $request, Response $response, Database $dbForProject, Document $project, Locale $locale, Reader $geodb, Event $events) { $email = \strtolower($email); $protocol = $request->getProtocol(); @@ -185,9 +186,11 @@ App::post('/v1/account/sessions/email') throw new Exception(Exception::USER_BLOCKED); // User is in status blocked } + $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $expire = DateTime::addSeconds(new \DateTime(), Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge( [ @@ -525,10 +528,11 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } // Create session token, verify user account and update OAuth2 ID and Access Token + $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); $session = new Document(array_merge([ '$id' => ID::unique(), @@ -759,10 +763,11 @@ App::put('/v1/account/sessions/magic-url') ->inject('request') ->inject('response') ->inject('dbForProject') + ->inject('project') ->inject('locale') ->inject('geodb') ->inject('events') - ->action(function (string $userId, string $secret, Request $request, Response $response, Database $dbForProject, Locale $locale, Reader $geodb, Event $events) { + ->action(function (string $userId, string $secret, Request $request, Response $response, Database $dbForProject, Document $project, Locale $locale, Reader $geodb, Event $events) { /** @var Utopia\Database\Document $user */ @@ -778,10 +783,11 @@ App::put('/v1/account/sessions/magic-url') throw new Exception(Exception::USER_INVALID_TOKEN); } + $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); $session = new Document(array_merge( [ @@ -996,10 +1002,11 @@ App::put('/v1/account/sessions/phone') ->inject('request') ->inject('response') ->inject('dbForProject') + ->inject('project') ->inject('locale') ->inject('geodb') ->inject('events') - ->action(function (string $userId, string $secret, Request $request, Response $response, Database $dbForProject, Locale $locale, Reader $geodb, Event $events) { + ->action(function (string $userId, string $secret, Request $request, Response $response, Database $dbForProject, Document $project, Locale $locale, Reader $geodb, Event $events) { $user = Authorization::skip(fn() => $dbForProject->getDocument('users', $userId)); @@ -1013,10 +1020,11 @@ App::put('/v1/account/sessions/phone') throw new Exception(Exception::USER_INVALID_TOKEN); } + $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); $session = new Document(array_merge( [ @@ -1164,11 +1172,11 @@ App::post('/v1/account/sessions/anonymous') ]))); // Create session token - + $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); $session = new Document(array_merge( [ diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index bfea863d2..d5655b423 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -32,6 +32,7 @@ use Appwrite\Utopia\Database\Validator\Queries\Projects; use Utopia\Validator\ArrayList; use Utopia\Validator\Boolean; use Utopia\Validator\Hostname; +use Utopia\Validator\Integer; use Utopia\Validator\Range; use Utopia\Validator\Text; use Utopia\Validator\WhiteList; @@ -67,10 +68,11 @@ App::post('/v1/projects') ->param('legalCity', '', new Text(256), 'Project legal City. Max length: 256 chars.', true) ->param('legalAddress', '', new Text(256), 'Project legal Address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal Tax ID. Max length: 256 chars.', true) + ->param('sessionDuration', 525600, new Integer(), 'Session duration in minutes. Defaults to 1 year', true) ->inject('response') ->inject('dbForConsole') ->inject('dbForProject') - ->action(function (string $projectId, string $name, string $teamId, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Response $response, Database $dbForConsole, Database $dbForProject) { + ->action(function (string $projectId, string $name, string $teamId, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $sessionDuration, Response $response, Database $dbForConsole, Database $dbForProject) { $team = $dbForConsole->getDocument('teams', $teamId); @@ -112,6 +114,7 @@ App::post('/v1/projects') 'legalCity' => $legalCity, 'legalAddress' => $legalAddress, 'legalTaxId' => ID::custom($legalTaxId), + 'sessionDuration' => $sessionDuration, 'services' => new stdClass(), 'platforms' => null, 'authProviders' => [], @@ -374,9 +377,10 @@ App::patch('/v1/projects/:projectId') ->param('legalCity', '', new Text(256), 'Project legal city. Max length: 256 chars.', true) ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) + ->param('sessionDuration', null, new Integer(true), 'Project session length in minutes. Max length: 525600 minutes.', true) ->inject('response') ->inject('dbForConsole') - ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Response $response, Database $dbForConsole) { + ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $sessionDuration, Response $response, Database $dbForConsole) { $project = $dbForConsole->getDocument('projects', $projectId); @@ -384,6 +388,10 @@ App::patch('/v1/projects/:projectId') throw new Exception(Exception::PROJECT_NOT_FOUND); } + if ($sessionDuration < 0 || $sessionDuration > 525600) { + throw new Exception('Session length must be between 0 and 525600 minutes'); + } + $project = $dbForConsole->updateDocument('projects', $project->getId(), $project ->setAttribute('name', $name) ->setAttribute('description', $description) @@ -395,6 +403,7 @@ App::patch('/v1/projects/:projectId') ->setAttribute('legalCity', $legalCity) ->setAttribute('legalAddress', $legalAddress) ->setAttribute('legalTaxId', $legalTaxId) + ->setAttribute('sessionDuration', $sessionDuration) ->setAttribute('search', implode(' ', [$projectId, $name]))); $response->dynamic($project, Response::MODEL_PROJECT); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index a42b9d317..67c3151ac 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -677,9 +677,10 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') ->inject('response') ->inject('user') ->inject('dbForProject') + ->inject('project') ->inject('geodb') ->inject('events') - ->action(function (string $teamId, string $membershipId, string $userId, string $secret, Request $request, Response $response, Document $user, Database $dbForProject, Reader $geodb, Event $events) { + ->action(function (string $teamId, string $membershipId, string $userId, string $secret, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Reader $geodb, Event $events) { $protocol = $request->getProtocol(); $membership = $dbForProject->getDocument('memberships', $membershipId); @@ -731,7 +732,8 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $expire = DateTime::addSeconds(new \DateTime(), Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge([ '$id' => ID::unique(), diff --git a/app/init.php b/app/init.php index 054721d43..93546075b 100644 --- a/app/init.php +++ b/app/init.php @@ -917,6 +917,7 @@ App::setResource('console', function () { 'legalCity' => '', 'legalAddress' => '', 'legalTaxId' => '', + 'sessionDuration' => 525600, // 1 Year in minutes 'auths' => [ 'limit' => (App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled') === 'enabled') ? 1 : 0, // limit signup to 1 user ], diff --git a/app/tasks/maintenance.php b/app/tasks/maintenance.php index 42b5ed00d..7a6630843 100644 --- a/app/tasks/maintenance.php +++ b/app/tasks/maintenance.php @@ -99,7 +99,7 @@ $cli { (new Delete()) ->setType(DELETE_TYPE_SESSIONS) - ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * Auth::TOKEN_EXPIRATION_LOGIN_LONG)) + ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * Auth::TOKEN_EXPIRATION_LOGIN_LONG)) //TODO: Update to use project session expiration instead of default. ->trigger(); } diff --git a/src/Appwrite/Utopia/Response/Model/Project.php b/src/Appwrite/Utopia/Response/Model/Project.php index 1638adeca..bb0476162 100644 --- a/src/Appwrite/Utopia/Response/Model/Project.php +++ b/src/Appwrite/Utopia/Response/Model/Project.php @@ -101,6 +101,12 @@ class Project extends Model 'default' => '', 'example' => '131102020', ]) + ->addRule('sessionDuration', [ + 'type' => self::TYPE_STRING, + 'description' => 'Session duration in minutes.', + 'default' => '', + 'example' => '30', + ]) ->addRule('authLimit', [ 'type' => self::TYPE_INTEGER, 'description' => 'Max users allowed. 0 is unlimited.', diff --git a/tests/e2e/Scopes/ProjectCustom.php b/tests/e2e/Scopes/ProjectCustom.php index 0a0c0a11a..865288955 100644 --- a/tests/e2e/Scopes/ProjectCustom.php +++ b/tests/e2e/Scopes/ProjectCustom.php @@ -53,6 +53,7 @@ trait ProjectCustom 'legalCity' => '', 'legalAddress' => '', 'legalTaxId' => '', + 'sessionDuration' => 525600 ]); $this->assertEquals(201, $project['headers']['status-code']); From 5dc8a2dee071d2ccc81498c77e2244271467fdf5 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 1 Nov 2022 11:15:45 +0000 Subject: [PATCH 06/62] Add Tests and fix bugs --- app/controllers/api/account.php | 10 +- app/controllers/api/projects.php | 2 +- app/controllers/api/teams.php | 2 +- .../Projects/ProjectsConsoleClientTest.php | 91 +++++++++++++++++++ 4 files changed, 98 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 177e968f3..ff0461f2f 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -186,7 +186,7 @@ App::post('/v1/account/sessions/email') throw new Exception(Exception::USER_BLOCKED); // User is in status blocked } - $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); @@ -528,7 +528,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } // Create session token, verify user account and update OAuth2 ID and Access Token - $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -783,7 +783,7 @@ App::put('/v1/account/sessions/magic-url') throw new Exception(Exception::USER_INVALID_TOKEN); } - $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1020,7 +1020,7 @@ App::put('/v1/account/sessions/phone') throw new Exception(Exception::USER_INVALID_TOKEN); } - $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1172,7 +1172,7 @@ App::post('/v1/account/sessions/anonymous') ]))); // Create session token - $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index d5655b423..d1ffcc496 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -377,7 +377,7 @@ App::patch('/v1/projects/:projectId') ->param('legalCity', '', new Text(256), 'Project legal city. Max length: 256 chars.', true) ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) - ->param('sessionDuration', null, new Integer(true), 'Project session length in minutes. Max length: 525600 minutes.', true) + ->param('sessionDuration', 525600, new Integer(true), 'Project session length in minutes. Max length: 525600 minutes.', true) ->inject('response') ->inject('dbForConsole') ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $sessionDuration, Response $response, Database $dbForConsole) { diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 67c3151ac..54e2bb37f 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -732,7 +732,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $sessionDuration = ($project->getAttribute('sessionDuration', null) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge([ diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index deb672c28..848a273a2 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -395,6 +395,97 @@ class ProjectsConsoleClientTest extends Scope return ['projectId' => $projectId]; } + /** @depends testGetProjectUsage */ + public function testUpdateProjectSessionDuration($data): array + { + $id = $data['projectId']; + + /** + * Test for SUCCESS + */ + $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'projectId' => ID::unique(), + 'name' => 'Project Test 2', + 'sessionDuration' => '1', // Set session duration to 1 minute + ]); + + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertNotEmpty($response['body']['$id']); + $this->assertEquals('Project Test 2', $response['body']['name']); + $this->assertArrayHasKey('platforms', $response['body']); + $this->assertArrayHasKey('webhooks', $response['body']); + $this->assertArrayHasKey('keys', $response['body']); + $this->assertEquals(1, $response['body']['sessionDuration']); + + $projectId = $response['body']['$id']; + + // Create New User + $response = $this->client->call(Client::METHOD_POST, '/account', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + ], $this->getHeaders()), [ + 'userId' => 'unique()', + 'email' => 'test' . rand(0, 9999) . '@example.com', + 'password' => 'password', + 'name' => 'Test User', + ]); + + $this->assertEquals(201, $response['headers']['status-code']); + + $userEmail = $response['body']['email']; + + // Create New User Session + $response = $this->client->call(Client::METHOD_POST, '/account/sessions/email', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + ]), [ + 'email' => $userEmail, + 'password' => 'password', + ]); + + $this->assertEquals(201, $response['headers']['status-code']); + + $sessionCookie = $response['headers']['set-cookie']; + + // Test for SUCCESS + $response = $this->client->call(Client::METHOD_GET, '/account', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'Cookie' => $sessionCookie, + ])); + + $this->assertEquals(200, $response['headers']['status-code']); + + // Wait just over a minute + sleep(65); + + // Get User + $response = $this->client->call(Client::METHOD_GET, '/account', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'Cookie' => $sessionCookie, + ])); + + $this->assertEquals(401, $response['headers']['status-code']); + + // Return project back to normal + $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'projectId' => ID::unique(), + 'name' => 'Project Test 2' + ]); + + $this->assertEquals(200, $response['headers']['status-code']); + $projectId = $response['body']['$id']; + + return ['projectId' => $projectId]; + } + /** * @depends testGetProjectUsage */ From 60127cc69dbf54df44111871f14e82a59720f90d Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 1 Nov 2022 11:21:34 +0000 Subject: [PATCH 07/62] Update CHANGES.md --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 340aec16d..3bdf330de 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,8 @@ # Version 1.1.0 +## Features +- Added new property to projects configuration: `sessionDuration` which allows you to alter the duration of signed in sessions for your project. [#4618](https://github.com/appwrite/appwrite/pull/4618) + ## Bugs - Fix license detection for Flutter and Dart SDKs [#4435](https://github.com/appwrite/appwrite/pull/4435) From 1eea8c6d8b49f1318395948cc85abe06fa066a94 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 1 Nov 2022 11:34:56 +0000 Subject: [PATCH 08/62] Add Extra Tests --- .../e2e/Services/Projects/ProjectsConsoleClientTest.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 848a273a2..b997acf07 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -483,6 +483,15 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); $projectId = $response['body']['$id']; + // Check project is back to normal + $response = $this->client->call(Client::METHOD_GET, '/projects/' . $projectId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => 'console', + ], $this->getHeaders())); + + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals(525600, $response['body']['sessionDuration']); // 1 Year + return ['projectId' => $projectId]; } From cddacfbb780a3b2bfadb46f3de59b656afa06f20 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 1 Nov 2022 14:43:18 +0000 Subject: [PATCH 09/62] Handle Eldad's Comments --- app/config/collections.php | 2 +- app/controllers/api/account.php | 20 +++++++++---------- app/controllers/api/projects.php | 13 ++++++------ app/controllers/api/teams.php | 4 ++-- app/init.php | 2 +- .../Utopia/Response/Model/Project.php | 2 +- tests/e2e/Scopes/ProjectCustom.php | 2 +- .../Projects/ProjectsConsoleClientTest.php | 8 ++++---- 8 files changed, 26 insertions(+), 27 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 7f51d9412..5fd6c7cc2 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -634,7 +634,7 @@ $collections = [ 'filters' => [], ], [ - '$id' => ID::custom('sessionDuration'), + '$id' => ID::custom('authDuration'), 'type' => Database::VAR_INTEGER, 'format' => '', 'size' => 32, diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index ff0461f2f..55fd522fc 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -186,11 +186,11 @@ App::post('/v1/account/sessions/email') throw new Exception(Exception::USER_BLOCKED); // User is in status blocked } - $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); + $expire = DateTime::addSeconds(new \DateTime(), $duration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge( [ @@ -528,11 +528,11 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } // Create session token, verify user account and update OAuth2 ID and Access Token - $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); + $expire = DateTime::addSeconds(new \DateTime(), $duration); $session = new Document(array_merge([ '$id' => ID::unique(), @@ -783,11 +783,11 @@ App::put('/v1/account/sessions/magic-url') throw new Exception(Exception::USER_INVALID_TOKEN); } - $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); + $expire = DateTime::addSeconds(new \DateTime(), $duration); $session = new Document(array_merge( [ @@ -1020,11 +1020,11 @@ App::put('/v1/account/sessions/phone') throw new Exception(Exception::USER_INVALID_TOKEN); } - $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); + $expire = DateTime::addSeconds(new \DateTime(), $duration); $session = new Document(array_merge( [ @@ -1172,11 +1172,11 @@ App::post('/v1/account/sessions/anonymous') ]))); // Create session token - $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); - $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); + $expire = DateTime::addSeconds(new \DateTime(), $duration); $session = new Document(array_merge( [ diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index d1ffcc496..d1ffff3aa 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -68,11 +68,10 @@ App::post('/v1/projects') ->param('legalCity', '', new Text(256), 'Project legal City. Max length: 256 chars.', true) ->param('legalAddress', '', new Text(256), 'Project legal Address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal Tax ID. Max length: 256 chars.', true) - ->param('sessionDuration', 525600, new Integer(), 'Session duration in minutes. Defaults to 1 year', true) ->inject('response') ->inject('dbForConsole') ->inject('dbForProject') - ->action(function (string $projectId, string $name, string $teamId, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $sessionDuration, Response $response, Database $dbForConsole, Database $dbForProject) { + ->action(function (string $projectId, string $name, string $teamId, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Response $response, Database $dbForConsole, Database $dbForProject) { $team = $dbForConsole->getDocument('teams', $teamId); @@ -114,7 +113,7 @@ App::post('/v1/projects') 'legalCity' => $legalCity, 'legalAddress' => $legalAddress, 'legalTaxId' => ID::custom($legalTaxId), - 'sessionDuration' => $sessionDuration, + 'authDuration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG / 60, 'services' => new stdClass(), 'platforms' => null, 'authProviders' => [], @@ -377,10 +376,10 @@ App::patch('/v1/projects/:projectId') ->param('legalCity', '', new Text(256), 'Project legal city. Max length: 256 chars.', true) ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) - ->param('sessionDuration', 525600, new Integer(true), 'Project session length in minutes. Max length: 525600 minutes.', true) + ->param('authDuration', 525600, new Integer(true), 'Project session length in minutes. Max length: 525600 minutes.', true) ->inject('response') ->inject('dbForConsole') - ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $sessionDuration, Response $response, Database $dbForConsole) { + ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $authDuration, Response $response, Database $dbForConsole) { $project = $dbForConsole->getDocument('projects', $projectId); @@ -388,7 +387,7 @@ App::patch('/v1/projects/:projectId') throw new Exception(Exception::PROJECT_NOT_FOUND); } - if ($sessionDuration < 0 || $sessionDuration > 525600) { + if ($authDuration < 0 || $authDuration > 525600) { throw new Exception('Session length must be between 0 and 525600 minutes'); } @@ -403,7 +402,7 @@ App::patch('/v1/projects/:projectId') ->setAttribute('legalCity', $legalCity) ->setAttribute('legalAddress', $legalAddress) ->setAttribute('legalTaxId', $legalTaxId) - ->setAttribute('sessionDuration', $sessionDuration) + ->setAttribute('authDuration', $authDuration) ->setAttribute('search', implode(' ', [$projectId, $name]))); $response->dynamic($project, Response::MODEL_PROJECT); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 54e2bb37f..a537054ed 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -732,8 +732,8 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $sessionDuration = ($project->getAttribute('sessionDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; - $expire = DateTime::addSeconds(new \DateTime(), $sessionDuration); + $authDuration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $expire = DateTime::addSeconds(new \DateTime(), $authDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge([ '$id' => ID::unique(), diff --git a/app/init.php b/app/init.php index 93546075b..6c9b9c97d 100644 --- a/app/init.php +++ b/app/init.php @@ -917,7 +917,7 @@ App::setResource('console', function () { 'legalCity' => '', 'legalAddress' => '', 'legalTaxId' => '', - 'sessionDuration' => 525600, // 1 Year in minutes + 'authDuration' => 525600, // 1 Year in minutes 'auths' => [ 'limit' => (App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled') === 'enabled') ? 1 : 0, // limit signup to 1 user ], diff --git a/src/Appwrite/Utopia/Response/Model/Project.php b/src/Appwrite/Utopia/Response/Model/Project.php index bb0476162..4338aa68d 100644 --- a/src/Appwrite/Utopia/Response/Model/Project.php +++ b/src/Appwrite/Utopia/Response/Model/Project.php @@ -101,7 +101,7 @@ class Project extends Model 'default' => '', 'example' => '131102020', ]) - ->addRule('sessionDuration', [ + ->addRule('authDuration', [ 'type' => self::TYPE_STRING, 'description' => 'Session duration in minutes.', 'default' => '', diff --git a/tests/e2e/Scopes/ProjectCustom.php b/tests/e2e/Scopes/ProjectCustom.php index 865288955..33e1820a6 100644 --- a/tests/e2e/Scopes/ProjectCustom.php +++ b/tests/e2e/Scopes/ProjectCustom.php @@ -53,7 +53,7 @@ trait ProjectCustom 'legalCity' => '', 'legalAddress' => '', 'legalTaxId' => '', - 'sessionDuration' => 525600 + 'authDuration' => 525600 ]); $this->assertEquals(201, $project['headers']['status-code']); diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index b997acf07..4d9692745 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -396,7 +396,7 @@ class ProjectsConsoleClientTest extends Scope } /** @depends testGetProjectUsage */ - public function testUpdateProjectSessionDuration($data): array + public function testUpdateProjectAuthDuration($data): array { $id = $data['projectId']; @@ -409,7 +409,7 @@ class ProjectsConsoleClientTest extends Scope ], $this->getHeaders()), [ 'projectId' => ID::unique(), 'name' => 'Project Test 2', - 'sessionDuration' => '1', // Set session duration to 1 minute + 'authDuration' => '1', // Set session duration to 1 minute ]); $this->assertEquals(200, $response['headers']['status-code']); @@ -418,7 +418,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertArrayHasKey('platforms', $response['body']); $this->assertArrayHasKey('webhooks', $response['body']); $this->assertArrayHasKey('keys', $response['body']); - $this->assertEquals(1, $response['body']['sessionDuration']); + $this->assertEquals(1, $response['body']['authDuration']); $projectId = $response['body']['$id']; @@ -490,7 +490,7 @@ class ProjectsConsoleClientTest extends Scope ], $this->getHeaders())); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(525600, $response['body']['sessionDuration']); // 1 Year + $this->assertEquals(525600, $response['body']['authDuration']); // 1 Year return ['projectId' => $projectId]; } From 4b8287c097b87ed50da77ea5953faf6a28e506b3 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Thu, 3 Nov 2022 15:03:39 +0000 Subject: [PATCH 10/62] Remove 'expire' from sessions --- app/config/collections.php | 11 ----------- app/controllers/api/account.php | 18 +++++++++++------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 5fd6c7cc2..439f2e93a 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -1625,17 +1625,6 @@ $collections = [ 'array' => false, 'filters' => ['encrypt'], ], - [ - '$id' => ID::custom('expire'), - 'type' => Database::VAR_DATETIME, - 'format' => '', - 'size' => 0, - 'signed' => false, - 'required' => false, - 'default' => null, - 'array' => false, - 'filters' => ['datetime'], - ], [ '$id' => ID::custom('userAgent'), 'type' => Database::VAR_STRING, diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 55fd522fc..082e7d778 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -200,7 +200,6 @@ App::post('/v1/account/sessions/email') 'provider' => Auth::SESSION_PROVIDER_EMAIL, 'providerUid' => $email, 'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak - 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), 'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--', @@ -247,6 +246,7 @@ App::post('/v1/account/sessions/email') $session ->setAttribute('current', true) ->setAttribute('countryName', $countryName) + ->setAttribute('expire', $expire) ; $events @@ -544,7 +544,6 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') 'providerRefreshToken' => $refreshToken, 'providerAccessTokenExpiry' => DateTime::addSeconds(new \DateTime(), (int)$accessTokenExpiry), 'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak - 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), 'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--', @@ -575,6 +574,8 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') $dbForProject->deleteCachedDocument('users', $user->getId()); + $session->setAttribute('expire', $expire); + $events ->setParam('userId', $user->getId()) ->setParam('sessionId', $session->getId()) @@ -691,7 +692,6 @@ App::post('/v1/account/sessions/magic-url') 'userInternalId' => $user->getInternalId(), 'type' => Auth::TOKEN_TYPE_MAGIC_URL, 'secret' => Auth::hash($loginSecret), // One way hash encryption to protect DB leak - 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), ]); @@ -796,7 +796,6 @@ App::put('/v1/account/sessions/magic-url') 'userInternalId' => $user->getInternalId(), 'provider' => Auth::SESSION_PROVIDER_MAGIC_URL, 'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak - 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), 'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--', @@ -856,6 +855,7 @@ App::put('/v1/account/sessions/magic-url') $session ->setAttribute('current', true) ->setAttribute('countryName', $countryName) + ->setAttribute('expire', $expire) ; $response->dynamic($session, Response::MODEL_SESSION); @@ -1033,7 +1033,6 @@ App::put('/v1/account/sessions/phone') 'userInternalId' => $user->getInternalId(), 'provider' => Auth::SESSION_PROVIDER_PHONE, 'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak - 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), 'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--', @@ -1091,6 +1090,7 @@ App::put('/v1/account/sessions/phone') $session ->setAttribute('current', true) ->setAttribute('countryName', $countryName) + ->setAttribute('expire', $expire) ; $response->dynamic($session, Response::MODEL_SESSION); @@ -1185,7 +1185,6 @@ App::post('/v1/account/sessions/anonymous') 'userInternalId' => $user->getInternalId(), 'provider' => Auth::SESSION_PROVIDER_ANONYMOUS, 'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak - 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), 'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--', @@ -1225,6 +1224,7 @@ App::post('/v1/account/sessions/anonymous') $session ->setAttribute('current', true) ->setAttribute('countryName', $countryName) + ->setAttribute('expire', $expire) ; $response->dynamic($session, Response::MODEL_SESSION); @@ -1430,7 +1430,8 @@ App::get('/v1/account/sessions/:sessionId') ->inject('user') ->inject('locale') ->inject('dbForProject') - ->action(function (?string $sessionId, Response $response, Document $user, Locale $locale, Database $dbForProject) { + ->inject('project') + ->action(function (?string $sessionId, Response $response, Document $user, Locale $locale, Database $dbForProject, Document $project) { $sessions = $user->getAttribute('sessions', []); $sessionId = ($sessionId === 'current') @@ -1444,6 +1445,7 @@ App::get('/v1/account/sessions/:sessionId') $session ->setAttribute('current', ($session->getAttribute('secret') == Auth::hash(Auth::$secret))) ->setAttribute('countryName', $countryName) + ->setAttribute('expire', $session->getAttribute('$createdAt', 0) + $project->getAttribute('authDuration', 0)) ; return $response->dynamic($session, Response::MODEL_SESSION); @@ -1828,6 +1830,8 @@ App::patch('/v1/account/sessions/:sessionId') $dbForProject->deleteCachedDocument('users', $user->getId()); + $session->setAttribute('expire', $session->getAttribute('$createdAt', 0) + $project->getAttribute('authDuration', 0)); + $events ->setParam('userId', $user->getId()) ->setParam('sessionId', $session->getId()) From 94676a6c16b8db5d1fcee226db823c6be2749b63 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Fri, 4 Nov 2022 09:50:59 +0000 Subject: [PATCH 11/62] Alter sessionVerify to remove expire --- app/controllers/api/account.php | 20 +++++++++++--------- app/init.php | 2 +- app/realtime.php | 2 +- src/Appwrite/Auth/Auth.php | 6 +++--- tests/unit/Auth/AuthTest.php | 16 ++++++++-------- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 082e7d778..7a525db8f 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -453,7 +453,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } $sessions = $user->getAttribute('sessions', []); - $current = Auth::sessionVerify($sessions, Auth::$secret); + $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', 0)); if ($current) { // Delete current session of new one. $currentDocument = $dbForProject->getDocument('sessions', $current); @@ -1332,10 +1332,11 @@ App::get('/v1/account/sessions') ->inject('response') ->inject('user') ->inject('locale') - ->action(function (Response $response, Document $user, Locale $locale) { + ->inject('project') + ->action(function (Response $response, Document $user, Locale $locale, Document $project) { $sessions = $user->getAttribute('sessions', []); - $current = Auth::sessionVerify($sessions, Auth::$secret); + $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', 0)); foreach ($sessions as $key => $session) {/** @var Document $session */ $countryName = $locale->getText('countries.' . strtolower($session->getAttribute('countryCode')), $locale->getText('locale.country.unknown')); @@ -1435,7 +1436,7 @@ App::get('/v1/account/sessions/:sessionId') $sessions = $user->getAttribute('sessions', []); $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', 0)) : $sessionId; foreach ($sessions as $session) {/** @var Document $session */ @@ -1445,7 +1446,7 @@ App::get('/v1/account/sessions/:sessionId') $session ->setAttribute('current', ($session->getAttribute('secret') == Auth::hash(Auth::$secret))) ->setAttribute('countryName', $countryName) - ->setAttribute('expire', $session->getAttribute('$createdAt', 0) + $project->getAttribute('authDuration', 0)) + ->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', 0))) ; return $response->dynamic($session, Response::MODEL_SESSION); @@ -1712,11 +1713,12 @@ App::delete('/v1/account/sessions/:sessionId') ->inject('dbForProject') ->inject('locale') ->inject('events') - ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Event $events) { + ->inject('project') + ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Event $events, Document $project) { $protocol = $request->getProtocol(); $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', 0)) : $sessionId; $sessions = $user->getAttribute('sessions', []); @@ -1789,7 +1791,7 @@ App::patch('/v1/account/sessions/:sessionId') ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Event $events) { $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', 0)) : $sessionId; $sessions = $user->getAttribute('sessions', []); @@ -1830,7 +1832,7 @@ App::patch('/v1/account/sessions/:sessionId') $dbForProject->deleteCachedDocument('users', $user->getId()); - $session->setAttribute('expire', $session->getAttribute('$createdAt', 0) + $project->getAttribute('authDuration', 0)); + $session->setAttribute('expire', $session->getCreatedAt() + $project->getAttribute('authDuration', 0)); $events ->setParam('userId', $user->getId()) diff --git a/app/init.php b/app/init.php index 6c9b9c97d..531deaa9a 100644 --- a/app/init.php +++ b/app/init.php @@ -837,7 +837,7 @@ App::setResource('user', function ($mode, $project, $console, $request, $respons if ( $user->isEmpty() // Check a document has been found in the DB - || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret) + || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', 0)) ) { // Validate user has valid login token $user = new Document(['$id' => ID::custom(''), '$collection' => 'users']); } diff --git a/app/realtime.php b/app/realtime.php index be87c3d6e..b0822fd17 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -539,7 +539,7 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re if ( empty($user->getId()) // Check a document has been found in the DB - || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret) // Validate user has valid login token + || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', 0)) // Validate user has valid login token ) { // cookie not valid throw new Exception('Session is not valid.', 1003); diff --git a/src/Appwrite/Auth/Auth.php b/src/Appwrite/Auth/Auth.php index adde25a7a..b397e9ea7 100644 --- a/src/Appwrite/Auth/Auth.php +++ b/src/Appwrite/Auth/Auth.php @@ -352,19 +352,19 @@ class Auth * * @param array $sessions * @param string $secret + * @param string $expires * * @return bool|string */ - public static function sessionVerify(array $sessions, string $secret) + public static function sessionVerify(array $sessions, string $secret, int $expires) { foreach ($sessions as $session) { /** @var Document $session */ if ( $session->isSet('secret') && - $session->isSet('expire') && $session->isSet('provider') && $session->getAttribute('secret') === self::hash($secret) && - DateTime::formatTz($session->getAttribute('expire')) >= DateTime::formatTz(DateTime::now()) + DateTime::formatTz(DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $expires)) >= DateTime::formatTz(DateTime::now()) ) { return $session->getId(); } diff --git a/tests/unit/Auth/AuthTest.php b/tests/unit/Auth/AuthTest.php index 822b612db..a4ed5740c 100644 --- a/tests/unit/Auth/AuthTest.php +++ b/tests/unit/Auth/AuthTest.php @@ -204,46 +204,46 @@ class AuthTest extends TestCase public function testSessionVerify(): void { + $expireTime1 = 60 * 60 * 24; + $secret = 'secret1'; $hash = Auth::hash($secret); $tokens1 = [ new Document([ '$id' => ID::custom('token1'), - 'expire' => DateTime::formatTz(DateTime::addSeconds(new \DateTime(), 60 * 60 * 24)), 'secret' => $hash, 'provider' => Auth::SESSION_PROVIDER_EMAIL, 'providerUid' => 'test@example.com', ]), new Document([ '$id' => ID::custom('token2'), - 'expire' => DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -60 * 60 * 24)), 'secret' => 'secret2', 'provider' => Auth::SESSION_PROVIDER_EMAIL, 'providerUid' => 'test@example.com', ]), ]; + $expireTime2 = -60 * 60 * 24; + $tokens2 = [ new Document([ // Correct secret and type time, wrong expire time '$id' => ID::custom('token1'), - 'expire' => DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -60 * 60 * 24)), 'secret' => $hash, 'provider' => Auth::SESSION_PROVIDER_EMAIL, 'providerUid' => 'test@example.com', ]), new Document([ '$id' => ID::custom('token2'), - 'expire' => DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -60 * 60 * 24)), 'secret' => 'secret2', 'provider' => Auth::SESSION_PROVIDER_EMAIL, 'providerUid' => 'test@example.com', ]), ]; - $this->assertEquals(Auth::sessionVerify($tokens1, $secret), 'token1'); - $this->assertEquals(Auth::sessionVerify($tokens1, 'false-secret'), false); - $this->assertEquals(Auth::sessionVerify($tokens2, $secret), false); - $this->assertEquals(Auth::sessionVerify($tokens2, 'false-secret'), false); + $this->assertEquals(Auth::sessionVerify($tokens1, $secret, $expireTime1), 'token1'); + $this->assertEquals(Auth::sessionVerify($tokens1, 'false-secret', $expireTime1), false); + $this->assertEquals(Auth::sessionVerify($tokens2, $secret, $expireTime2), false); + $this->assertEquals(Auth::sessionVerify($tokens2, 'false-secret', $expireTime2), false); } public function testTokenVerify(): void From 4cfc3b3a7f2773e4e7630b65a617600b6558c41b Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Fri, 4 Nov 2022 10:12:02 +0000 Subject: [PATCH 12/62] Update authDuration fallback value --- app/controllers/api/account.php | 24 ++++++++++++------------ app/controllers/api/teams.php | 2 +- app/init.php | 2 +- app/realtime.php | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 7a525db8f..90910c412 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -186,7 +186,7 @@ App::post('/v1/account/sessions/email') throw new Exception(Exception::USER_BLOCKED); // User is in status blocked } - $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); @@ -453,7 +453,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } $sessions = $user->getAttribute('sessions', []); - $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', 0)); + $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)); if ($current) { // Delete current session of new one. $currentDocument = $dbForProject->getDocument('sessions', $current); @@ -528,7 +528,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } // Create session token, verify user account and update OAuth2 ID and Access Token - $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -783,7 +783,7 @@ App::put('/v1/account/sessions/magic-url') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1020,7 +1020,7 @@ App::put('/v1/account/sessions/phone') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1172,7 +1172,7 @@ App::post('/v1/account/sessions/anonymous') ]))); // Create session token - $duration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1336,7 +1336,7 @@ App::get('/v1/account/sessions') ->action(function (Response $response, Document $user, Locale $locale, Document $project) { $sessions = $user->getAttribute('sessions', []); - $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', 0)); + $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)); foreach ($sessions as $key => $session) {/** @var Document $session */ $countryName = $locale->getText('countries.' . strtolower($session->getAttribute('countryCode')), $locale->getText('locale.country.unknown')); @@ -1436,7 +1436,7 @@ App::get('/v1/account/sessions/:sessionId') $sessions = $user->getAttribute('sessions', []); $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', 0)) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) : $sessionId; foreach ($sessions as $session) {/** @var Document $session */ @@ -1446,7 +1446,7 @@ App::get('/v1/account/sessions/:sessionId') $session ->setAttribute('current', ($session->getAttribute('secret') == Auth::hash(Auth::$secret))) ->setAttribute('countryName', $countryName) - ->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', 0))) + ->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG))) ; return $response->dynamic($session, Response::MODEL_SESSION); @@ -1718,7 +1718,7 @@ App::delete('/v1/account/sessions/:sessionId') $protocol = $request->getProtocol(); $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', 0)) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) : $sessionId; $sessions = $user->getAttribute('sessions', []); @@ -1791,7 +1791,7 @@ App::patch('/v1/account/sessions/:sessionId') ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Event $events) { $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', 0)) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) : $sessionId; $sessions = $user->getAttribute('sessions', []); @@ -1832,7 +1832,7 @@ App::patch('/v1/account/sessions/:sessionId') $dbForProject->deleteCachedDocument('users', $user->getId()); - $session->setAttribute('expire', $session->getCreatedAt() + $project->getAttribute('authDuration', 0)); + $session->setAttribute('expire', $session->getCreatedAt() + $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)); $events ->setParam('userId', $user->getId()) diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index a537054ed..a31ca5476 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -732,7 +732,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $authDuration = ($project->getAttribute('authDuration', 0) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $expire = DateTime::addSeconds(new \DateTime(), $authDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge([ diff --git a/app/init.php b/app/init.php index 531deaa9a..0e6f35b52 100644 --- a/app/init.php +++ b/app/init.php @@ -837,7 +837,7 @@ App::setResource('user', function ($mode, $project, $console, $request, $respons if ( $user->isEmpty() // Check a document has been found in the DB - || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', 0)) + || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) ) { // Validate user has valid login token $user = new Document(['$id' => ID::custom(''), '$collection' => 'users']); } diff --git a/app/realtime.php b/app/realtime.php index b0822fd17..50f3ae05b 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -539,7 +539,7 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re if ( empty($user->getId()) // Check a document has been found in the DB - || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', 0)) // Validate user has valid login token + || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) // Validate user has valid login token ) { // cookie not valid throw new Exception('Session is not valid.', 1003); From e1f9a8e0ce16e340f2932c735100c81c91c5a9a6 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Fri, 4 Nov 2022 14:48:29 +0000 Subject: [PATCH 13/62] Clean up a couple things and fix tests --- app/config/collections.php | 2 +- app/controllers/api/account.php | 16 ++++++++++------ app/controllers/api/projects.php | 2 +- app/controllers/api/teams.php | 3 +-- app/init.php | 2 +- src/Appwrite/Utopia/Response/Model/Project.php | 2 +- .../Projects/ProjectsConsoleClientTest.php | 2 +- 7 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 439f2e93a..3f3dac692 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -640,7 +640,7 @@ $collections = [ 'size' => 32, 'signed' => true, 'required' => false, - 'default' => 525600, // 1 Year + 'default' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, // 1 Year 'array' => false, 'filters' => [], ], diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 90910c412..c4707db3c 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -186,7 +186,7 @@ App::post('/v1/account/sessions/email') throw new Exception(Exception::USER_BLOCKED); // User is in status blocked } - $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); @@ -528,7 +528,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } // Create session token, verify user account and update OAuth2 ID and Access Token - $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -692,6 +692,7 @@ App::post('/v1/account/sessions/magic-url') 'userInternalId' => $user->getInternalId(), 'type' => Auth::TOKEN_TYPE_MAGIC_URL, 'secret' => Auth::hash($loginSecret), // One way hash encryption to protect DB leak + 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), ]); @@ -783,7 +784,7 @@ App::put('/v1/account/sessions/magic-url') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1020,7 +1021,7 @@ App::put('/v1/account/sessions/phone') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1172,7 +1173,7 @@ App::post('/v1/account/sessions/anonymous') ]))); // Create session token - $duration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1832,7 +1833,9 @@ App::patch('/v1/account/sessions/:sessionId') $dbForProject->deleteCachedDocument('users', $user->getId()); - $session->setAttribute('expire', $session->getCreatedAt() + $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)); + $session->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG))); + + var_dump(DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG))); $events ->setParam('userId', $user->getId()) @@ -1887,6 +1890,7 @@ App::delete('/v1/account/sessions') if ($session->getAttribute('secret') == Auth::hash(Auth::$secret)) { $session->setAttribute('current', true); + $session->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), Auth::TOKEN_EXPIRATION_LOGIN_LONG)); // If current session delete the cookies too $response diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index d1ffff3aa..609e26a50 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -402,7 +402,7 @@ App::patch('/v1/projects/:projectId') ->setAttribute('legalCity', $legalCity) ->setAttribute('legalAddress', $legalAddress) ->setAttribute('legalTaxId', $legalTaxId) - ->setAttribute('authDuration', $authDuration) + ->setAttribute('authDuration', $authDuration * 60) ->setAttribute('search', implode(' ', [$projectId, $name]))); $response->dynamic($project, Response::MODEL_PROJECT); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index a31ca5476..be2d39203 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -732,7 +732,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $authDuration = ($project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG) * 60) ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); $expire = DateTime::addSeconds(new \DateTime(), $authDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge([ @@ -742,7 +742,6 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') 'provider' => Auth::SESSION_PROVIDER_EMAIL, 'providerUid' => $user->getAttribute('email'), 'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak - 'expire' => $expire, 'userAgent' => $request->getUserAgent('UNKNOWN'), 'ip' => $request->getIP(), 'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--', diff --git a/app/init.php b/app/init.php index 0e6f35b52..d162e643f 100644 --- a/app/init.php +++ b/app/init.php @@ -917,7 +917,7 @@ App::setResource('console', function () { 'legalCity' => '', 'legalAddress' => '', 'legalTaxId' => '', - 'authDuration' => 525600, // 1 Year in minutes + 'authDuration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, // 1 Year in seconds 'auths' => [ 'limit' => (App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled') === 'enabled') ? 1 : 0, // limit signup to 1 user ], diff --git a/src/Appwrite/Utopia/Response/Model/Project.php b/src/Appwrite/Utopia/Response/Model/Project.php index 4338aa68d..1801be0ba 100644 --- a/src/Appwrite/Utopia/Response/Model/Project.php +++ b/src/Appwrite/Utopia/Response/Model/Project.php @@ -103,7 +103,7 @@ class Project extends Model ]) ->addRule('authDuration', [ 'type' => self::TYPE_STRING, - 'description' => 'Session duration in minutes.', + 'description' => 'Session duration in seconds.', 'default' => '', 'example' => '30', ]) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 4d9692745..fa85082e9 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -418,7 +418,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertArrayHasKey('platforms', $response['body']); $this->assertArrayHasKey('webhooks', $response['body']); $this->assertArrayHasKey('keys', $response['body']); - $this->assertEquals(1, $response['body']['authDuration']); + $this->assertEquals(60, $response['body']['authDuration']); $projectId = $response['body']['$id']; From 85cb520dd6dae144b9c1ab9d1938e4c4c59fb7e4 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 7 Nov 2022 11:14:01 +0000 Subject: [PATCH 14/62] Fix testUpdateProjectAuthDuration --- tests/e2e/Services/Projects/ProjectsConsoleClientTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index fa85082e9..6cf02af9a 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -490,7 +490,7 @@ class ProjectsConsoleClientTest extends Scope ], $this->getHeaders())); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(525600, $response['body']['authDuration']); // 1 Year + $this->assertEquals(31536000, $response['body']['authDuration']); // 1 Year return ['projectId' => $projectId]; } From 842185e45d84f5fcfcc2330f3dfa680fe61504e9 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 7 Nov 2022 11:58:57 +0000 Subject: [PATCH 15/62] Update projects.php --- app/controllers/api/projects.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 3f0299cc7..eaa113055 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -376,7 +376,7 @@ App::patch('/v1/projects/:projectId') ->param('legalCity', '', new Text(256), 'Project legal city. Max length: 256 chars.', true) ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) - ->param('authDuration', 525600, new Integer(true), 'Project session length in minutes. Max length: 525600 minutes.', true) + ->param('authDuration', 525600, new Range(0, 525600), 'Project session length in minutes. Max length: 525600 minutes.', true) ->inject('response') ->inject('dbForConsole') ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $authDuration, Response $response, Database $dbForConsole) { @@ -387,10 +387,6 @@ App::patch('/v1/projects/:projectId') throw new Exception(Exception::PROJECT_NOT_FOUND); } - if ($authDuration < 0 || $authDuration > 525600) { - throw new Exception('Session length must be between 0 and 525600 minutes'); - } - $project = $dbForConsole->updateDocument('projects', $project->getId(), $project ->setAttribute('name', $name) ->setAttribute('description', $description) From 4dd919f640b280fd10a54c896ff77e758210208f Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 9 Nov 2022 15:07:39 +0100 Subject: [PATCH 16/62] fix --- .gitmodules | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index ad823b3d9..000000000 --- a/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "app/console"] - path = app/console - url = https://github.com/appwrite/console.git - branch = main From 9565152ced8f1d688a19673a84c908f666d15544 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 9 Nov 2022 15:22:38 +0100 Subject: [PATCH 17/62] chore: update console --- .gitmodules | 4 ++++ app/console | 1 + 2 files changed, 5 insertions(+) create mode 100644 .gitmodules create mode 160000 app/console diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..21c5e2123 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "app/console"] + path = app/console + url = https://github.com/app/console + branch = main diff --git a/app/console b/app/console new file mode 160000 index 000000000..c3a0b1e77 --- /dev/null +++ b/app/console @@ -0,0 +1 @@ +Subproject commit c3a0b1e77ef65298f829284c99b60daa473e97d9 From a2570f55685306666c84baabefe42ca82a81dc4c Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 9 Nov 2022 15:34:26 +0100 Subject: [PATCH 18/62] chore: update composer --- composer.json | 2 +- composer.lock | 127 ++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 94 insertions(+), 35 deletions(-) diff --git a/composer.json b/composer.json index 334120958..ab5a19c66 100644 --- a/composer.json +++ b/composer.json @@ -52,7 +52,7 @@ "utopia-php/database": "0.26.*", "utopia-php/preloader": "0.2.*", "utopia-php/domains": "1.1.*", - "utopia-php/framework": "dev-feat-multiple-aliases as 0.22.9", + "utopia-php/framework": "0.25.*", "utopia-php/image": "0.5.*", "utopia-php/locale": "0.4.*", "utopia-php/logger": "0.3.*", diff --git a/composer.lock b/composer.lock index 128532594..9e29747ad 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d8785bcc235caa7fe9312614f053d0cd", + "content-hash": "d4c95720bc6ef857dd6bc6dbbdc2dc44", "packages": [ { "name": "adhocore/jwt", @@ -115,15 +115,15 @@ }, { "name": "appwrite/php-runtimes", - "version": "0.11.0", + "version": "0.11.1", "source": { "type": "git", "url": "https://github.com/appwrite/runtimes.git", - "reference": "547fc026e11c0946846a8ac690898f5bf53be101" + "reference": "9d74a477ba3333cbcfac565c46fcf19606b7b603" }, "require": { "php": ">=8.0", - "utopia-php/system": "0.4.*" + "utopia-php/system": "0.6.*" }, "require-dev": { "phpunit/phpunit": "^9.3", @@ -154,7 +154,7 @@ "php", "runtimes" ], - "time": "2022-08-15T14:03:36+00:00" + "time": "2022-11-07T16:45:52+00:00" }, { "name": "chillerlan/php-qrcode", @@ -300,16 +300,16 @@ }, { "name": "colinmollenhour/credis", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/colinmollenhour/credis.git", - "reference": "85df015088e00daf8ce395189de22c8eb45c8d49" + "reference": "dccc8a46586475075fbb012d8bd523b8a938c2dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/85df015088e00daf8ce395189de22c8eb45c8d49", - "reference": "85df015088e00daf8ce395189de22c8eb45c8d49", + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/dccc8a46586475075fbb012d8bd523b8a938c2dc", + "reference": "dccc8a46586475075fbb012d8bd523b8a938c2dc", "shasum": "" }, "require": { @@ -341,9 +341,9 @@ "homepage": "https://github.com/colinmollenhour/credis", "support": { "issues": "https://github.com/colinmollenhour/credis/issues", - "source": "https://github.com/colinmollenhour/credis/tree/v1.13.1" + "source": "https://github.com/colinmollenhour/credis/tree/v1.14.0" }, - "time": "2022-06-20T22:56:59+00:00" + "time": "2022-11-09T01:18:39+00:00" }, { "name": "composer/package-versions-deprecated", @@ -931,6 +931,72 @@ }, "time": "2021-02-04T16:20:16+00:00" }, + { + "name": "laravel/pint", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/1d276e4c803397a26cc337df908f55c2a4e90d86", + "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11.0", + "illuminate/view": "^9.27", + "laravel-zero/framework": "^9.1.3", + "mockery/mockery": "^1.5.0", + "nunomaduro/larastan": "^2.2", + "nunomaduro/termwind": "^1.14.0", + "pestphp/pest": "^1.22.1" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2022-09-13T15:07:15+00:00" + }, { "name": "matomo/device-detector", "version": "6.0.0", @@ -2172,16 +2238,16 @@ }, { "name": "utopia-php/framework", - "version": "dev-feat-multiple-aliases", + "version": "0.25.0", "source": { "type": "git", "url": "https://github.com/utopia-php/framework.git", - "reference": "37637cb22a30e6660a0886befef4d6a5e657fc48" + "reference": "c524f681254255c8204fbf7919c53bf3b4982636" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/framework/zipball/37637cb22a30e6660a0886befef4d6a5e657fc48", - "reference": "37637cb22a30e6660a0886befef4d6a5e657fc48", + "url": "https://api.github.com/repos/utopia-php/framework/zipball/c524f681254255c8204fbf7919c53bf3b4982636", + "reference": "c524f681254255c8204fbf7919c53bf3b4982636", "shasum": "" }, "require": { @@ -2209,9 +2275,9 @@ ], "support": { "issues": "https://github.com/utopia-php/framework/issues", - "source": "https://github.com/utopia-php/framework/tree/feat-multiple-aliases" + "source": "https://github.com/utopia-php/framework/tree/0.25.0" }, - "time": "2022-10-20T21:06:21+00:00" + "time": "2022-11-02T09:49:57+00:00" }, { "name": "utopia-php/image", @@ -2709,23 +2775,25 @@ }, { "name": "utopia-php/system", - "version": "0.4.0", + "version": "0.6.0", "source": { "type": "git", "url": "https://github.com/utopia-php/system.git", - "reference": "67c92c66ce8f0cc925a00bca89f7a188bf9183c0" + "reference": "289c4327713deadc9c748b5317d248133a02f245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/system/zipball/67c92c66ce8f0cc925a00bca89f7a188bf9183c0", - "reference": "67c92c66ce8f0cc925a00bca89f7a188bf9183c0", + "url": "https://api.github.com/repos/utopia-php/system/zipball/289c4327713deadc9c748b5317d248133a02f245", + "reference": "289c4327713deadc9c748b5317d248133a02f245", "shasum": "" }, "require": { + "laravel/pint": "1.2.*", "php": ">=7.4" }, "require-dev": { "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "^3.6", "vimeo/psalm": "4.0.1" }, "type": "library", @@ -2758,9 +2826,9 @@ ], "support": { "issues": "https://github.com/utopia-php/system/issues", - "source": "https://github.com/utopia-php/system/tree/0.4.0" + "source": "https://github.com/utopia-php/system/tree/0.6.0" }, - "time": "2021-02-04T14:14:49+00:00" + "time": "2022-11-07T13:51:59+00:00" }, { "name": "utopia-php/websocket", @@ -5405,18 +5473,9 @@ "time": "2022-09-28T08:42:51+00:00" } ], - "aliases": [ - { - "package": "utopia-php/framework", - "version": "dev-feat-multiple-aliases", - "alias": "0.22.9", - "alias_normalized": "0.22.9.0" - } - ], + "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "utopia-php/framework": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { From d307d4f698c60d716ed5f2a741684b3ff2889b94 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 9 Nov 2022 15:45:20 +0100 Subject: [PATCH 19/62] revert: dockerfile formatting --- .gitignore | 1 - Dockerfile | 264 +- gulpfile.js | 186 - package-lock.json | 9673 --------------------------------------------- package.json | 26 - 5 files changed, 132 insertions(+), 10018 deletions(-) delete mode 100644 gulpfile.js delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/.gitignore b/.gitignore index 906bba876..a0e910f79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ /.vscode/ /vendor/ -/console /node_modules/ /tests/resources/storage/ /tests/resources/functions/**/code.tar.gz diff --git a/Dockerfile b/Dockerfile index dca684d34..84a469ba8 100755 --- a/Dockerfile +++ b/Dockerfile @@ -9,8 +9,8 @@ COPY composer.lock /usr/local/src/ COPY composer.json /usr/local/src/ RUN composer install --ignore-platform-reqs --optimize-autoloader \ - --no-plugins --no-scripts --prefer-dist \ - `if [ "$TESTING" != "true" ]; then echo "--no-dev"; fi` + --no-plugins --no-scripts --prefer-dist \ + `if [ "$TESTING" != "true" ]; then echo "--no-dev"; fi` FROM node:16.14.2-alpine3.15 as node @@ -27,12 +27,12 @@ ARG DEBUG=false ENV DEBUG=$DEBUG ENV PHP_REDIS_VERSION=5.3.7 \ - PHP_MONGODB_VERSION=1.13.0 \ - PHP_SWOOLE_VERSION=v4.8.10 \ - PHP_IMAGICK_VERSION=3.7.0 \ - PHP_YAML_VERSION=2.2.2 \ - PHP_MAXMINDDB_VERSION=v1.11.0 \ - PHP_ZSTD_VERSION="4504e4186e79b197cfcb75d4d09aa47ef7d92fe9 " + PHP_MONGODB_VERSION=1.13.0 \ + PHP_SWOOLE_VERSION=v4.8.10 \ + PHP_IMAGICK_VERSION=3.7.0 \ + PHP_YAML_VERSION=2.2.2 \ + PHP_MAXMINDDB_VERSION=v1.11.0 \ + PHP_ZSTD_VERSION="4504e4186e79b197cfcb75d4d09aa47ef7d92fe9 " RUN \ apk add --no-cache --virtual .deps \ @@ -74,14 +74,14 @@ RUN \ ## Swoole Debugger setup RUN if [ "$DEBUG" == "true" ]; then \ - cd /tmp && \ - apk add boost-dev && \ - git clone --depth 1 https://github.com/swoole/yasd && \ - cd yasd && \ - phpize && \ - ./configure && \ - make && make install && \ - cd ..;\ + cd /tmp && \ + apk add boost-dev && \ + git clone --depth 1 https://github.com/swoole/yasd && \ + cd yasd && \ + phpize && \ + ./configure && \ + make && make install && \ + cd ..;\ fi ## Imagick Extension @@ -171,88 +171,88 @@ ENV DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} ENV DOCKER_COMPOSE_VERSION=v2.5.0 ENV _APP_SERVER=swoole \ - _APP_ENV=production \ - _APP_LOCALE=en \ - _APP_WORKER_PER_CORE= \ - _APP_DOMAIN=localhost \ - _APP_DOMAIN_TARGET=localhost \ - _APP_HOME=https://appwrite.io \ - _APP_EDITION=community \ - _APP_CONSOLE_WHITELIST_ROOT=enabled \ - _APP_CONSOLE_WHITELIST_EMAILS= \ - _APP_CONSOLE_WHITELIST_IPS= \ - _APP_SYSTEM_EMAIL_NAME= \ - _APP_SYSTEM_EMAIL_ADDRESS= \ - _APP_SYSTEM_RESPONSE_FORMAT= \ - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS= \ - _APP_OPTIONS_ABUSE=enabled \ - _APP_OPTIONS_FORCE_HTTPS=disabled \ - _APP_OPENSSL_KEY_V1=your-secret-key \ - _APP_STORAGE_LIMIT=10000000 \ - _APP_STORAGE_ANTIVIRUS=enabled \ - _APP_STORAGE_ANTIVIRUS_HOST=clamav \ - _APP_STORAGE_ANTIVIRUS_PORT=3310 \ - _APP_STORAGE_DEVICE=Local \ - _APP_STORAGE_S3_ACCESS_KEY= \ - _APP_STORAGE_S3_SECRET= \ - _APP_STORAGE_S3_REGION= \ - _APP_STORAGE_S3_BUCKET= \ - _APP_STORAGE_DO_SPACES_ACCESS_KEY= \ - _APP_STORAGE_DO_SPACES_SECRET= \ - _APP_STORAGE_DO_SPACES_REGION= \ - _APP_STORAGE_DO_SPACES_BUCKET= \ - _APP_STORAGE_BACKBLAZE_ACCESS_KEY= \ - _APP_STORAGE_BACKBLAZE_SECRET= \ - _APP_STORAGE_BACKBLAZE_REGION= \ - _APP_STORAGE_BACKBLAZE_BUCKET= \ - _APP_STORAGE_LINODE_ACCESS_KEY= \ - _APP_STORAGE_LINODE_SECRET= \ - _APP_STORAGE_LINODE_REGION= \ - _APP_STORAGE_LINODE_BUCKET= \ - _APP_STORAGE_WASABI_ACCESS_KEY= \ - _APP_STORAGE_WASABI_SECRET= \ - _APP_STORAGE_WASABI_REGION= \ - _APP_STORAGE_WASABI_BUCKET= \ - _APP_REDIS_HOST=redis \ - _APP_REDIS_PORT=6379 \ - _APP_DB_HOST=mariadb \ - _APP_DB_PORT=3306 \ - _APP_DB_USER=root \ - _APP_DB_PASS=password \ - _APP_DB_SCHEMA=appwrite \ - _APP_INFLUXDB_HOST=influxdb \ - _APP_INFLUXDB_PORT=8086 \ - _APP_STATSD_HOST=telegraf \ - _APP_STATSD_PORT=8125 \ - _APP_SMTP_HOST= \ - _APP_SMTP_PORT= \ - _APP_SMTP_SECURE= \ - _APP_SMTP_USERNAME= \ - _APP_SMTP_PASSWORD= \ - _APP_SMS_PROVIDER= \ - _APP_SMS_FROM= \ - _APP_FUNCTIONS_SIZE_LIMIT=30000000 \ - _APP_FUNCTIONS_TIMEOUT=900 \ - _APP_FUNCTIONS_CONTAINERS=10 \ - _APP_FUNCTIONS_CPUS=1 \ - _APP_FUNCTIONS_MEMORY=128 \ - _APP_FUNCTIONS_MEMORY_SWAP=128 \ - _APP_EXECUTOR_SECRET=a-random-secret \ - _APP_EXECUTOR_HOST=http://appwrite-executor/v1 \ - _APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes \ - _APP_SETUP=self-hosted \ - _APP_VERSION=$VERSION \ - _APP_USAGE_STATS=enabled \ - _APP_USAGE_TIMESERIES_INTERVAL=30 \ - _APP_USAGE_DATABASE_INTERVAL=900 \ - # 14 Days = 1209600 s - _APP_MAINTENANCE_RETENTION_EXECUTION=1209600 \ - _APP_MAINTENANCE_RETENTION_AUDIT=1209600 \ - # 1 Day = 86400 s - _APP_MAINTENANCE_RETENTION_ABUSE=86400 \ - _APP_MAINTENANCE_INTERVAL=86400 \ - _APP_LOGGING_PROVIDER= \ - _APP_LOGGING_CONFIG= + _APP_ENV=production \ + _APP_LOCALE=en \ + _APP_WORKER_PER_CORE= \ + _APP_DOMAIN=localhost \ + _APP_DOMAIN_TARGET=localhost \ + _APP_HOME=https://appwrite.io \ + _APP_EDITION=community \ + _APP_CONSOLE_WHITELIST_ROOT=enabled \ + _APP_CONSOLE_WHITELIST_EMAILS= \ + _APP_CONSOLE_WHITELIST_IPS= \ + _APP_SYSTEM_EMAIL_NAME= \ + _APP_SYSTEM_EMAIL_ADDRESS= \ + _APP_SYSTEM_RESPONSE_FORMAT= \ + _APP_SYSTEM_SECURITY_EMAIL_ADDRESS= \ + _APP_OPTIONS_ABUSE=enabled \ + _APP_OPTIONS_FORCE_HTTPS=disabled \ + _APP_OPENSSL_KEY_V1=your-secret-key \ + _APP_STORAGE_LIMIT=10000000 \ + _APP_STORAGE_ANTIVIRUS=enabled \ + _APP_STORAGE_ANTIVIRUS_HOST=clamav \ + _APP_STORAGE_ANTIVIRUS_PORT=3310 \ + _APP_STORAGE_DEVICE=Local \ + _APP_STORAGE_S3_ACCESS_KEY= \ + _APP_STORAGE_S3_SECRET= \ + _APP_STORAGE_S3_REGION= \ + _APP_STORAGE_S3_BUCKET= \ + _APP_STORAGE_DO_SPACES_ACCESS_KEY= \ + _APP_STORAGE_DO_SPACES_SECRET= \ + _APP_STORAGE_DO_SPACES_REGION= \ + _APP_STORAGE_DO_SPACES_BUCKET= \ + _APP_STORAGE_BACKBLAZE_ACCESS_KEY= \ + _APP_STORAGE_BACKBLAZE_SECRET= \ + _APP_STORAGE_BACKBLAZE_REGION= \ + _APP_STORAGE_BACKBLAZE_BUCKET= \ + _APP_STORAGE_LINODE_ACCESS_KEY= \ + _APP_STORAGE_LINODE_SECRET= \ + _APP_STORAGE_LINODE_REGION= \ + _APP_STORAGE_LINODE_BUCKET= \ + _APP_STORAGE_WASABI_ACCESS_KEY= \ + _APP_STORAGE_WASABI_SECRET= \ + _APP_STORAGE_WASABI_REGION= \ + _APP_STORAGE_WASABI_BUCKET= \ + _APP_REDIS_HOST=redis \ + _APP_REDIS_PORT=6379 \ + _APP_DB_HOST=mariadb \ + _APP_DB_PORT=3306 \ + _APP_DB_USER=root \ + _APP_DB_PASS=password \ + _APP_DB_SCHEMA=appwrite \ + _APP_INFLUXDB_HOST=influxdb \ + _APP_INFLUXDB_PORT=8086 \ + _APP_STATSD_HOST=telegraf \ + _APP_STATSD_PORT=8125 \ + _APP_SMTP_HOST= \ + _APP_SMTP_PORT= \ + _APP_SMTP_SECURE= \ + _APP_SMTP_USERNAME= \ + _APP_SMTP_PASSWORD= \ + _APP_SMS_PROVIDER= \ + _APP_SMS_FROM= \ + _APP_FUNCTIONS_SIZE_LIMIT=30000000 \ + _APP_FUNCTIONS_TIMEOUT=900 \ + _APP_FUNCTIONS_CONTAINERS=10 \ + _APP_FUNCTIONS_CPUS=1 \ + _APP_FUNCTIONS_MEMORY=128 \ + _APP_FUNCTIONS_MEMORY_SWAP=128 \ + _APP_EXECUTOR_SECRET=a-random-secret \ + _APP_EXECUTOR_HOST=http://appwrite-executor/v1 \ + _APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes \ + _APP_SETUP=self-hosted \ + _APP_VERSION=$VERSION \ + _APP_USAGE_STATS=enabled \ + _APP_USAGE_TIMESERIES_INTERVAL=30 \ + _APP_USAGE_DATABASE_INTERVAL=900 \ + # 14 Days = 1209600 s + _APP_MAINTENANCE_RETENTION_EXECUTION=1209600 \ + _APP_MAINTENANCE_RETENTION_AUDIT=1209600 \ + # 1 Day = 86400 s + _APP_MAINTENANCE_RETENTION_ABUSE=86400 \ + _APP_MAINTENANCE_INTERVAL=86400 \ + _APP_LOGGING_PROVIDER= \ + _APP_LOGGING_CONFIG= RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone @@ -288,7 +288,7 @@ RUN \ RUN \ if [ "$DEBUG" == "true" ]; then \ - apk add boost boost-dev; \ + apk add boost boost-dev; \ fi WORKDIR /usr/src/code @@ -314,41 +314,41 @@ COPY ./src /usr/src/code/src # Set Volumes RUN mkdir -p /storage/uploads && \ - mkdir -p /storage/cache && \ - mkdir -p /storage/config && \ - mkdir -p /storage/certificates && \ - mkdir -p /storage/functions && \ - mkdir -p /storage/debug && \ - chown -Rf www-data.www-data /storage/uploads && chmod -Rf 0755 /storage/uploads && \ - chown -Rf www-data.www-data /storage/cache && chmod -Rf 0755 /storage/cache && \ - chown -Rf www-data.www-data /storage/config && chmod -Rf 0755 /storage/config && \ - chown -Rf www-data.www-data /storage/certificates && chmod -Rf 0755 /storage/certificates && \ - chown -Rf www-data.www-data /storage/functions && chmod -Rf 0755 /storage/functions && \ - chown -Rf www-data.www-data /storage/debug && chmod -Rf 0755 /storage/debug + mkdir -p /storage/cache && \ + mkdir -p /storage/config && \ + mkdir -p /storage/certificates && \ + mkdir -p /storage/functions && \ + mkdir -p /storage/debug && \ + chown -Rf www-data.www-data /storage/uploads && chmod -Rf 0755 /storage/uploads && \ + chown -Rf www-data.www-data /storage/cache && chmod -Rf 0755 /storage/cache && \ + chown -Rf www-data.www-data /storage/config && chmod -Rf 0755 /storage/config && \ + chown -Rf www-data.www-data /storage/certificates && chmod -Rf 0755 /storage/certificates && \ + chown -Rf www-data.www-data /storage/functions && chmod -Rf 0755 /storage/functions && \ + chown -Rf www-data.www-data /storage/debug && chmod -Rf 0755 /storage/debug # Executables RUN chmod +x /usr/local/bin/doctor && \ - chmod +x /usr/local/bin/maintenance && \ - chmod +x /usr/local/bin/usage && \ - chmod +x /usr/local/bin/install && \ - chmod +x /usr/local/bin/migrate && \ - chmod +x /usr/local/bin/realtime && \ - chmod +x /usr/local/bin/executor && \ - chmod +x /usr/local/bin/schedule && \ - chmod +x /usr/local/bin/sdks && \ - chmod +x /usr/local/bin/specs && \ - chmod +x /usr/local/bin/ssl && \ - chmod +x /usr/local/bin/test && \ - chmod +x /usr/local/bin/vars && \ - chmod +x /usr/local/bin/worker-audits && \ - chmod +x /usr/local/bin/worker-certificates && \ - chmod +x /usr/local/bin/worker-databases && \ - chmod +x /usr/local/bin/worker-deletes && \ - chmod +x /usr/local/bin/worker-functions && \ - chmod +x /usr/local/bin/worker-builds && \ - chmod +x /usr/local/bin/worker-mails && \ - chmod +x /usr/local/bin/worker-messaging && \ - chmod +x /usr/local/bin/worker-webhooks + chmod +x /usr/local/bin/maintenance && \ + chmod +x /usr/local/bin/usage && \ + chmod +x /usr/local/bin/install && \ + chmod +x /usr/local/bin/migrate && \ + chmod +x /usr/local/bin/realtime && \ + chmod +x /usr/local/bin/executor && \ + chmod +x /usr/local/bin/schedule && \ + chmod +x /usr/local/bin/sdks && \ + chmod +x /usr/local/bin/specs && \ + chmod +x /usr/local/bin/ssl && \ + chmod +x /usr/local/bin/test && \ + chmod +x /usr/local/bin/vars && \ + chmod +x /usr/local/bin/worker-audits && \ + chmod +x /usr/local/bin/worker-certificates && \ + chmod +x /usr/local/bin/worker-databases && \ + chmod +x /usr/local/bin/worker-deletes && \ + chmod +x /usr/local/bin/worker-functions && \ + chmod +x /usr/local/bin/worker-builds && \ + chmod +x /usr/local/bin/worker-mails && \ + chmod +x /usr/local/bin/worker-messaging && \ + chmod +x /usr/local/bin/worker-webhooks # Letsencrypt Permissions RUN mkdir -p /etc/letsencrypt/live/ && chmod -Rf 755 /etc/letsencrypt/live/ @@ -373,4 +373,4 @@ RUN echo "opcache.jit=1235" >> /usr/local/etc/php/conf.d/appwrite.ini EXPOSE 80 -CMD [ "php", "app/http.php", "-dopcache.preload=opcache.preload=/usr/src/code/app/preload.php" ] +CMD [ "php", "app/http.php", "-dopcache.preload=opcache.preload=/usr/src/code/app/preload.php" ] \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 7ca0fcb0a..000000000 --- a/gulpfile.js +++ /dev/null @@ -1,186 +0,0 @@ -// Include gulp -const { src, dest, series } = require('gulp'); - -// Plugins -const gulpConcat = require('gulp-concat'); -const gulpJsmin = require('gulp-jsmin'); -const gulpLess = require('gulp-less'); -const gulpCleanCSS = require('gulp-clean-css'); - -// Config - -const configApp = { - mainFile: 'app.js', - src: [ - 'public/scripts/dependencies/litespeed.js', - 'public/scripts/dependencies/alpine.js', - - 'public/scripts/init.js', - - 'public/scripts/services/alerts.js', - 'public/scripts/services/api.js', - 'public/scripts/services/console.js', - 'public/scripts/services/date.js', - 'public/scripts/services/env.js', - 'public/scripts/services/form.js', - 'public/scripts/services/markdown.js', - 'public/scripts/services/rtl.js', - 'public/scripts/services/sdk.js', - 'public/scripts/services/search.js', - 'public/scripts/services/timezone.js', - 'public/scripts/services/realtime.js', - - 'public/scripts/routes.js', - 'public/scripts/filters.js', - 'public/scripts/app.js', - 'public/scripts/upload-modal.js', - 'public/scripts/events.js', - 'public/scripts/permissions-matrix.js', - - 'public/scripts/views/service.js', - - 'public/scripts/views/analytics/event.js', - 'public/scripts/views/analytics/activity.js', - 'public/scripts/views/analytics/pageview.js', - - 'public/scripts/views/forms/clone.js', - 'public/scripts/views/forms/add.js', - 'public/scripts/views/forms/chart.js', - 'public/scripts/views/forms/chart-bar.js', - 'public/scripts/views/forms/code.js', - 'public/scripts/views/forms/color.js', - 'public/scripts/views/forms/copy.js', - 'public/scripts/views/forms/custom-id.js', - 'public/scripts/views/forms/document.js', - 'public/scripts/views/forms/duplications.js', - 'public/scripts/views/forms/document-preview.js', - 'public/scripts/views/forms/filter.js', - 'public/scripts/views/forms/headers.js', - 'public/scripts/views/forms/key-value.js', - 'public/scripts/views/forms/move-down.js', - 'public/scripts/views/forms/move-up.js', - 'public/scripts/views/forms/nav.js', - 'public/scripts/views/forms/oauth-custom.js', - 'public/scripts/views/forms/password-meter.js', - 'public/scripts/views/forms/pell.js', - 'public/scripts/views/forms/required.js', - 'public/scripts/views/forms/remove.js', - 'public/scripts/views/forms/run.js', - 'public/scripts/views/forms/select-all.js', - 'public/scripts/views/forms/selected.js', - 'public/scripts/views/forms/show-secret.js', - 'public/scripts/views/forms/switch.js', - 'public/scripts/views/forms/tags.js', - 'public/scripts/views/forms/text-count.js', - 'public/scripts/views/forms/text-direction.js', - 'public/scripts/views/forms/text-resize.js', - 'public/scripts/views/forms/upload.js', - - 'public/scripts/views/general/cookies.js', - 'public/scripts/views/general/copy.js', - 'public/scripts/views/general/page-title.js', - 'public/scripts/views/general/scroll-to.js', - 'public/scripts/views/general/scroll-direction.js', - 'public/scripts/views/general/setup.js', - 'public/scripts/views/general/switch.js', - 'public/scripts/views/general/theme.js', - 'public/scripts/views/general/version.js', - - 'public/scripts/views/paging/back.js', - 'public/scripts/views/paging/next.js', - - 'public/scripts/views/ui/highlight.js', - 'public/scripts/views/ui/loader.js', - 'public/scripts/views/ui/modal.js', - 'public/scripts/views/ui/open.js', - 'public/scripts/views/ui/phases.js', - 'public/scripts/views/ui/trigger.js', - ], - - dest: './public/dist/scripts' -}; - -const configDep = { - mainFile: 'app-dep.js', - src: [ - 'public/scripts/dependencies/appwrite.js', - 'node_modules/chart.js/dist/chart.js', - 'node_modules/markdown-it/dist/markdown-it.js', - 'node_modules/pell/dist/pell.js', - 'node_modules/turndown/dist/turndown.js', - // PrismJS Core - 'node_modules/prismjs/components/prism-core.min.js', - // PrismJS Languages - 'node_modules/prismjs/components/prism-markup.min.js', - 'node_modules/prismjs/components/prism-css.min.js', - 'node_modules/prismjs/components/prism-clike.min.js', - 'node_modules/prismjs/components/prism-javascript.min.js', - 'node_modules/prismjs/components/prism-bash.min.js', - 'node_modules/prismjs/components/prism-csharp.min.js', - 'node_modules/prismjs/components/prism-dart.min.js', - 'node_modules/prismjs/components/prism-go.min.js', - 'node_modules/prismjs/components/prism-graphql.min.js', - 'node_modules/prismjs/components/prism-http.min.js', - 'node_modules/prismjs/components/prism-java.min.js', - 'node_modules/prismjs/components/prism-json.min.js', - 'node_modules/prismjs/components/prism-kotlin.min.js', - 'node_modules/prismjs/components/prism-markup-templating.min.js', - 'node_modules/prismjs/components/prism-php.min.js', - 'node_modules/prismjs/components/prism-powershell.min.js', - 'node_modules/prismjs/components/prism-python.min.js', - 'node_modules/prismjs/components/prism-ruby.min.js', - 'node_modules/prismjs/components/prism-swift.min.js', - 'node_modules/prismjs/components/prism-typescript.min.js', - 'node_modules/prismjs/components/prism-yaml.min.js', - // PrismJS Plugins - 'node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.js', - ], - dest: './public/dist/scripts' -}; - -const config = { - mainFile: 'app-all.js', - src: [ - 'public/dist/scripts/app-dep.js', - 'public/dist/scripts/app.js' - ], - dest: './public/dist/scripts' -}; - -function lessLTR() { - return src('./public/styles/default-ltr.less') - .pipe(gulpLess()) - .pipe(gulpCleanCSS({ compatibility: 'ie8' })) - .pipe(dest('./public/dist/styles')); -} - -function lessRTL() { - return src('./public/styles/default-rtl.less') - .pipe(gulpLess()) - .pipe(gulpCleanCSS({ compatibility: 'ie8' })) - .pipe(dest('./public/dist/styles')); -} - -function concatApp() { - return src(configApp.src) - .pipe(gulpConcat(configApp.mainFile)) - .pipe(gulpJsmin()) - .pipe(dest(configApp.dest)); -} - -function concatDep() { - return src(configDep.src) - .pipe(gulpConcat(configDep.mainFile)) - .pipe(gulpJsmin()) - .pipe(dest(configDep.dest)); -} - -function concat() { - return src(config.src) - .pipe(gulpConcat(config.mainFile)) - .pipe(dest(config.dest)); -} - -exports.import = series(concatDep); -exports.less = series(lessLTR, lessRTL); -exports.build = series(concatApp, concat); diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 58949bf12..000000000 --- a/package-lock.json +++ /dev/null @@ -1,9673 +0,0 @@ -{ - "name": "appwrite-server", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "appwrite-server", - "version": "0.1.0", - "license": "BSD-3-Clause", - "dependencies": { - "chart.js": "^3.8.2", - "markdown-it": "^13.0.1", - "pell": "^1.0.6", - "prismjs": "^1.28.0", - "turndown": "^7.1.1" - }, - "devDependencies": { - "gulp": "^4.0.2", - "gulp-clean-css": "^4.3.0", - "gulp-concat": "^2.6.1", - "gulp-jsmin": "^0.1.5", - "gulp-less": "^5.0.0" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha512-sGwIGMjhYdW26/IhwK2gkWWI8DRCVO6uj3hYgHT+zD+QL1pa37tM3ujhyfcJIYSbsxp7Gxhy7zrRW/1AHm4BmA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha512-f2PKUkN5QngiSemowa6Mrk9MPCdtFiOSmibjZ+j1qhLGHHYsqZwmBMRF3IRMVXo8sybDqx2fJl2d/8OphBoWkA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", - "dev": true, - "dependencies": { - "async-done": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", - "dev": true, - "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", - "dev": true, - "dependencies": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha512-bIKA54hP8iZhyDT81TOsJiQvR1gW+ZYSXFaZUAvoD4wCHdbHY2actmpTE4x344ZlFqHbvoxKOaESULTZN2gstg==", - "dev": true, - "dependencies": { - "ansi-styles": "^1.1.0", - "escape-string-regexp": "^1.0.0", - "has-ansi": "^0.1.0", - "strip-ansi": "^0.3.0", - "supports-color": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/char-props": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/char-props/-/char-props-0.1.5.tgz", - "integrity": "sha512-LOK+5fxkfJ6TNqd6Fd6I9UWivppCnikzVGNafki4XUTjLrAGhiWkv3c68vEqUDbK6+uz8T+dd2U3jSsBxnpt6g==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/chart.js": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", - "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" - }, - "node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "dependencies": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==", - "dev": true, - "dependencies": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - }, - "bin": { - "dateformat": "bin/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "dependencies": { - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/domino": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", - "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" - }, - "node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", - "dev": true, - "dependencies": { - "readable-stream": "~1.1.9" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } - }, - "node_modules/each-props/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/filesize": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.4.tgz", - "integrity": "sha512-XyVEXpwElavSK0SKn51E3960lTRfglsQA9goJN4QR+oyqStts1Wygs1FW3TFQrxJoGm4mcq3hTxDMN3Vs1cYwg==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fined/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs-mkdirp-stream/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/fs-mkdirp-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/graceful-fs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", - "integrity": "sha512-hcj/NTUWv+C3MbqrVb9F+aH6lvTwEHJdx2foBxlrVq5h6zE8Bfu4pv4CAAqbDcZrw/9Ak5lsRXlY9Ao8/F0Tuw==", - "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-clean-css": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.3.0.tgz", - "integrity": "sha512-mGyeT3qqFXTy61j0zOIciS4MkYziF2U594t2Vs9rUnpkEHqfu6aDITMp8xOvZcvdX61Uz3y1mVERRYmjzQF5fg==", - "dev": true, - "dependencies": { - "clean-css": "4.2.3", - "plugin-error": "1.0.1", - "through2": "3.0.1", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha512-a2scActrQrDBpBbR3WUZGyGS1JEPLg5PZJdIa7/Bi3GuKAmPYDK6SFhy/NZq5R8KsKKFvtfR0fakbUCcKGCCjg==", - "dev": true, - "dependencies": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-concat/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/gulp-jsmin": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/gulp-jsmin/-/gulp-jsmin-0.1.5.tgz", - "integrity": "sha512-MpaGIE4CYlRgSf9p+bBTidqmhU0aphmgdCgXzd+xdVb7bW/ObYP1gzLYeTDGSSQw+tzjqQlAf1DyXlfOHxNQ1Q==", - "dev": true, - "dependencies": { - "filesize": "~2.0.0", - "graceful-fs": "~2.0.0", - "gulp-rename": "~1.1.0", - "gulp-util": "~2.2.0", - "jsmin-sourcemap": "~0.16.0", - "map-stream": "0.0.4", - "temp-write": "~0.1.0" - } - }, - "node_modules/gulp-less": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-5.0.0.tgz", - "integrity": "sha512-W2I3TewO/By6UZsM/wJG3pyK5M6J0NYmJAAhwYXQHR+38S0iDtZasmUgFCH3CQj+pQYw/PAIzxvFvwtEXz1HhQ==", - "dev": true, - "dependencies": { - "less": "^3.7.1 || ^4.0.0", - "object-assign": "^4.0.1", - "plugin-error": "^1.0.0", - "replace-ext": "^2.0.0", - "through2": "^4.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/gulp-less/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/gulp-less/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/gulp-rename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.1.0.tgz", - "integrity": "sha512-juUttYYC7PuQjWmRVvgLFBtxvprujQnJR1HD4hGiLi4a3EqQTtd7QWnb/SfW1kbb9OjH7wcWZm+yD6W6r9fiEg==", - "dev": true, - "dependencies": { - "map-stream": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0", - "npm": ">=1.2.10" - } - }, - "node_modules/gulp-util": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", - "integrity": "sha512-9rtv4sj9EtCWYGD15HQQvWtRBtU9g1t0+w29tphetHxjxEAuBKQJkhGqvlLkHEtUjEgoqIpsVwPKU1yMZAa+wA==", - "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", - "dev": true, - "dependencies": { - "chalk": "^0.5.0", - "dateformat": "^1.0.7-1.2.3", - "lodash._reinterpolate": "^2.4.1", - "lodash.template": "^2.4.1", - "minimist": "^0.2.0", - "multipipe": "^0.1.0", - "through2": "^0.5.0", - "vinyl": "^0.2.1" - }, - "engines": { - "node": ">= 0.9" - } - }, - "node_modules/gulp-util/node_modules/clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true - }, - "node_modules/gulp-util/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/gulp-util/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/gulp-util/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/gulp-util/node_modules/through2": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "integrity": "sha512-zexCrAOTbjkBCXGyozn7hhS3aEaqdrc59mAD2E3dKYzV1vFuEGQ1hEDJN2oQMQFwy4he2zyLqPZV+AlfS8ZWJA==", - "dev": true, - "dependencies": { - "readable-stream": "~1.0.17", - "xtend": "~3.0.0" - } - }, - "node_modules/gulp-util/node_modules/vinyl": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", - "integrity": "sha512-4gFk9xrecazOTuFKcUYrE1TjHSYL63dio72D+q0d1mHF51FEcxTT2RHFpHbN5TNJgmPYHuVsBdhvXEOCDcytSA==", - "dev": true, - "dependencies": { - "clone-stats": "~0.0.1" - }, - "engines": { - "node": ">= 0.9" - } - }, - "node_modules/gulp-util/node_modules/xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", - "dev": true, - "dependencies": { - "glogg": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha512-1YsTg1fk2/6JToQhtZkArMkurq8UoWU1Qe0aR3VUHjgij4nOylSWLWAtBXoZ4/dXOmugfLGm1c+QhuD0JyedFA==", - "dev": true, - "dependencies": { - "ansi-regex": "^0.2.0" - }, - "bin": { - "has-ansi": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsmin-sourcemap": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jsmin-sourcemap/-/jsmin-sourcemap-0.16.0.tgz", - "integrity": "sha512-/oJn++2sfbBa/5xLUGD22NwtJqxYbW7C0IpR9nZIAedg0MRuzWeCDd7CghYCSYGLLL9LsVNccQhgC4Ph+nmfww==", - "dev": true, - "dependencies": { - "jsmin2": "~1.1.1", - "source-map-index-generator": "~0.1.1" - } - }, - "node_modules/jsmin2": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/jsmin2/-/jsmin2-1.1.9.tgz", - "integrity": "sha512-C1kkou9A0qYYWkrGbUFMx4IfO2RIysZC93Xo2CVrYr/ZKMiPj9gN+hJvI89LPQJF0RQOwjd1GSKfM4iGZlpMpw==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", - "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "optional": true - }, - "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/liftoff/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lodash._escapehtmlchar": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", - "integrity": "sha512-eHm2t2Lg476lq5v4FVmm3B5mCaRlDyTE8fnMfPCEq2o46G4au0qNXIKh7YWhjprm1zgSMLcMSs1XHMgkw02PbQ==", - "dev": true, - "dependencies": { - "lodash._htmlescapes": "~2.4.1" - } - }, - "node_modules/lodash._escapestringchar": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", - "integrity": "sha512-iZ6Os4iipaE43pr9SBks+UpZgAjJgRC+lGf7onEoByMr1+Nagr1fmR7zCM6Q4RGMB/V3a57raEN0XZl7Uub3/g==", - "dev": true - }, - "node_modules/lodash._htmlescapes": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", - "integrity": "sha512-g79hNmMOBVyV+4oKIHM7MWy9Awtk3yqf0Twlawr6f+CmG44nTwBh9I5XiLUnk39KTfYoDBpS66glQGgQCnFIuA==", - "dev": true - }, - "node_modules/lodash._isnative": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", - "integrity": "sha512-BOlKGKNHhCHswGOWtmVb5zBygyxN7EmTuzVOSQI6QSoGhG+kvv71gICFS1TBpnqvT1n53txK8CDK3u5D2/GZxQ==", - "dev": true - }, - "node_modules/lodash._objecttypes": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==", - "dev": true - }, - "node_modules/lodash._reinterpolate": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", - "integrity": "sha512-QGEOOjJi7W9LIgDAMVgtGBb8Qgo8ieDlSOCoZjtG45ZNRvDJZjwVMTYlfTIWdNRUiR1I9BjIqQ3Zaf1+DYM94g==", - "dev": true - }, - "node_modules/lodash._reunescapedhtml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", - "integrity": "sha512-CfmZRU1Mk4E/5jh+Wu8lc7tuc3VkuwWZYVIgdPDH9NRSHgiL4Or3AA4JCIpgrkVzHOM+jKu2OMkAVquruhRHDQ==", - "dev": true, - "dependencies": { - "lodash._htmlescapes": "~2.4.1", - "lodash.keys": "~2.4.1" - } - }, - "node_modules/lodash._shimkeys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", - "integrity": "sha512-lBrglYxLD/6KAJ8IEa5Lg+YHgNAL7FyKqXg4XOUI+Du/vtniLs1ZqS+yHNKPkK54waAgkdUnDOYaWf+rv4B+AA==", - "dev": true, - "dependencies": { - "lodash._objecttypes": "~2.4.1" - } - }, - "node_modules/lodash.defaults": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", - "integrity": "sha512-5wTIPWwGGr07JFysAZB8+7JB2NjJKXDIwogSaRX5zED85zyUAQwtOqUk8AsJkkigUcL3akbHYXd5+BPtTGQPZw==", - "dev": true, - "dependencies": { - "lodash._objecttypes": "~2.4.1", - "lodash.keys": "~2.4.1" - } - }, - "node_modules/lodash.escape": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", - "integrity": "sha512-PiEStyvZ8gz37qBE+HqME1Yc/ewb/59AMOu8pG7Ztani86foPTxgzckQvMdphmXPY6V5f20Ex/CaNBqHG4/ycQ==", - "dev": true, - "dependencies": { - "lodash._escapehtmlchar": "~2.4.1", - "lodash._reunescapedhtml": "~2.4.1", - "lodash.keys": "~2.4.1" - } - }, - "node_modules/lodash.isobject": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", - "dev": true, - "dependencies": { - "lodash._objecttypes": "~2.4.1" - } - }, - "node_modules/lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha512-ZpJhwvUXHSNL5wYd1RM6CUa2ZuqorG9ngoJ9Ix5Cce+uX7I5O/E06FCJdhSZ33b5dVyeQDnIlWH7B2s5uByZ7g==", - "dev": true, - "dependencies": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" - } - }, - "node_modules/lodash.template": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", - "integrity": "sha512-5yLOQwlS69xbaez3g9dA1i0GMAj8pLDHp8lhA4V7M1vRam1lqD76f0jg5EV+65frbqrXo1WH9ZfKalfYBzJ5yQ==", - "dev": true, - "dependencies": { - "lodash._escapestringchar": "~2.4.1", - "lodash._reinterpolate": "~2.4.1", - "lodash.defaults": "~2.4.1", - "lodash.escape": "~2.4.1", - "lodash.keys": "~2.4.1", - "lodash.templatesettings": "~2.4.1", - "lodash.values": "~2.4.1" - } - }, - "node_modules/lodash.templatesettings": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", - "integrity": "sha512-vY3QQ7GxbeLe8XfTvoYDbaMHO5iyTDJS1KIZrxp00PRMmyBKr8yEcObHSl2ppYTwd8MgqPXAarTvLA14hx8ffw==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "~2.4.1", - "lodash.escape": "~2.4.1" - } - }, - "node_modules/lodash.values": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", - "integrity": "sha512-fQwubKvj2Nox2gy6YnjFm8C1I6MIlzKUtBB+Pj7JGtloGqDDL5CPRr4DUUFWPwXWwAl2k3f4C3Aw8H1qAPB9ww==", - "dev": true, - "dependencies": { - "lodash.keys": "~2.4.1" - } - }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", - "dev": true, - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/make-iterator/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.4.tgz", - "integrity": "sha512-Z7r7iyB+6s4kZzM6V0DjG9em/X1roScoUPL2n35gEzofAiQTuU575taNaE3h+h20cZGUfInxjtq9KX7bzBQaXA==", - "dev": true - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "dependencies": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.1.tgz", - "integrity": "sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", - "dev": true, - "dependencies": { - "duplexer2": "0.0.2" - } - }, - "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/needle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz", - "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "optional": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pell": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pell/-/pell-1.0.6.tgz", - "integrity": "sha512-wuackvgjFCHmVABy7ACSmY2u53w+TlYFrVL2hN6V3rGL/iWWwVXMw2uphpZSXNnqFQTI8nMpD3UNNX8+R4BAYw==" - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/plugin-error/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/readdirp/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", - "dev": true, - "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-bom-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", - "dev": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dev": true, - "dependencies": { - "value-or-function": "^3.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", - "dev": true, - "dependencies": { - "sver-compat": "^1.5.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-index-generator": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/source-map-index-generator/-/source-map-index-generator-0.1.2.tgz", - "integrity": "sha512-WcpUz0VoY2gA0J3VQKpHkRK7dIBg0g/eY/vfhhB6Nxy6tmOUpDmRsr8SbbRA+lGv3ZrhKaHld/BA3z2ZN4jO4g==", - "dev": true, - "dependencies": { - "char-props": "~0.1.3", - "source-map": "~0.1.8" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/source-map-index-generator/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha512-DerhZL7j6i6/nEnVG0qViKXI0OKouvvpsAiaj7c+LfqZZZxdwZtv8+UiA/w4VUJpT8UzX0pR1dcHOii1GbmruQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^0.2.1" - }, - "bin": { - "strip-ansi": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "dependencies": { - "get-stdin": "^4.0.1" - }, - "bin": { - "strip-indent": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha512-tdCZ28MnM7k7cJDJc7Eq80A9CsRFAAOZUy41npOZCs++qSjfIy7o5Rh46CBk+Dk5FbKJ33X3Tqg4YrV07N5RaA==", - "dev": true, - "bin": { - "supports-color": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", - "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/temp-write": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-0.1.1.tgz", - "integrity": "sha512-m8xMOxqZB3/8I28A4Bz3BMO67k0jwkIrFQChxqV4XavpU9p3YJcidBEqJuc9oY60iSGW3qlCiM0xkq2FiQlpFw==", - "dev": true, - "dependencies": { - "graceful-fs": "~2.0.0", - "tempfile": "~0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tempfile": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz", - "integrity": "sha512-eW5GbbQLBEpa21WNlpvJcvv/DNXLyMNOQBnhellCzQdXAf5Ctmrr8GDLc/YAymOF3t+17wmeE+kZCKBoaanEtA==", - "dev": true, - "dependencies": { - "uuid": "~1.4.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dev": true, - "dependencies": { - "readable-stream": "2 || 3" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/through2-filter/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", - "dev": true, - "dependencies": { - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/to-through/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/turndown": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.1.tgz", - "integrity": "sha512-BEkXaWH7Wh7e9bd2QumhfAXk5g34+6QUmmWx+0q6ThaVOLuLUqsnkq35HQ5SBHSaxjSfSM7US5o4lhJNH7B9MA==", - "dependencies": { - "domino": "^2.1.6" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz", - "integrity": "sha512-woV5Ei+GBJyrqMXt0mJ9p8/I+47LYKp/4urH76FNTMjl22EhLPz1tNrQufTsrFf/PYV/7ctSZYAK7fKPWQKg+Q==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/vinyl-fs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", - "dev": true, - "dependencies": { - "source-map": "^0.5.1" - } - }, - "node_modules/vinyl-sourcemaps-apply/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vinyl/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - }, - "node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - } - }, - "dependencies": { - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha512-sGwIGMjhYdW26/IhwK2gkWWI8DRCVO6uj3hYgHT+zD+QL1pa37tM3ujhyfcJIYSbsxp7Gxhy7zrRW/1AHm4BmA==", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha512-f2PKUkN5QngiSemowa6Mrk9MPCdtFiOSmibjZ+j1qhLGHHYsqZwmBMRF3IRMVXo8sybDqx2fJl2d/8OphBoWkA==", - "dev": true - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true - }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", - "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - } - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", - "dev": true, - "requires": { - "async-done": "^1.2.2" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", - "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha512-bIKA54hP8iZhyDT81TOsJiQvR1gW+ZYSXFaZUAvoD4wCHdbHY2actmpTE4x344ZlFqHbvoxKOaESULTZN2gstg==", - "dev": true, - "requires": { - "ansi-styles": "^1.1.0", - "escape-string-regexp": "^1.0.0", - "has-ansi": "^0.1.0", - "strip-ansi": "^0.3.0", - "supports-color": "^0.2.0" - } - }, - "char-props": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/char-props/-/char-props-0.1.5.tgz", - "integrity": "sha512-LOK+5fxkfJ6TNqd6Fd6I9UWivppCnikzVGNafki4XUTjLrAGhiWkv3c68vEqUDbK6+uz8T+dd2U3jSsBxnpt6g==", - "dev": true - }, - "chart.js": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", - "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "requires": { - "kind-of": "^5.0.2" - } - }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true - }, - "domino": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", - "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filesize": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.4.tgz", - "integrity": "sha512-XyVEXpwElavSK0SKn51E3960lTRfglsQA9goJN4QR+oyqStts1Wygs1FW3TFQrxJoGm4mcq3hTxDMN3Vs1cYwg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", - "integrity": "sha512-hcj/NTUWv+C3MbqrVb9F+aH6lvTwEHJdx2foBxlrVq5h6zE8Bfu4pv4CAAqbDcZrw/9Ak5lsRXlY9Ao8/F0Tuw==", - "dev": true - }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - } - }, - "gulp-clean-css": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.3.0.tgz", - "integrity": "sha512-mGyeT3qqFXTy61j0zOIciS4MkYziF2U594t2Vs9rUnpkEHqfu6aDITMp8xOvZcvdX61Uz3y1mVERRYmjzQF5fg==", - "dev": true, - "requires": { - "clean-css": "4.2.3", - "plugin-error": "1.0.1", - "through2": "3.0.1", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - } - }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha512-a2scActrQrDBpBbR3WUZGyGS1JEPLg5PZJdIa7/Bi3GuKAmPYDK6SFhy/NZq5R8KsKKFvtfR0fakbUCcKGCCjg==", - "dev": true, - "requires": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "gulp-jsmin": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/gulp-jsmin/-/gulp-jsmin-0.1.5.tgz", - "integrity": "sha512-MpaGIE4CYlRgSf9p+bBTidqmhU0aphmgdCgXzd+xdVb7bW/ObYP1gzLYeTDGSSQw+tzjqQlAf1DyXlfOHxNQ1Q==", - "dev": true, - "requires": { - "filesize": "~2.0.0", - "graceful-fs": "~2.0.0", - "gulp-rename": "~1.1.0", - "gulp-util": "~2.2.0", - "jsmin-sourcemap": "~0.16.0", - "map-stream": "0.0.4", - "temp-write": "~0.1.0" - } - }, - "gulp-less": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-5.0.0.tgz", - "integrity": "sha512-W2I3TewO/By6UZsM/wJG3pyK5M6J0NYmJAAhwYXQHR+38S0iDtZasmUgFCH3CQj+pQYw/PAIzxvFvwtEXz1HhQ==", - "dev": true, - "requires": { - "less": "^3.7.1 || ^4.0.0", - "object-assign": "^4.0.1", - "plugin-error": "^1.0.0", - "replace-ext": "^2.0.0", - "through2": "^4.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } - } - }, - "gulp-rename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.1.0.tgz", - "integrity": "sha512-juUttYYC7PuQjWmRVvgLFBtxvprujQnJR1HD4hGiLi4a3EqQTtd7QWnb/SfW1kbb9OjH7wcWZm+yD6W6r9fiEg==", - "dev": true, - "requires": { - "map-stream": ">=0.0.4" - } - }, - "gulp-util": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", - "integrity": "sha512-9rtv4sj9EtCWYGD15HQQvWtRBtU9g1t0+w29tphetHxjxEAuBKQJkhGqvlLkHEtUjEgoqIpsVwPKU1yMZAa+wA==", - "dev": true, - "requires": { - "chalk": "^0.5.0", - "dateformat": "^1.0.7-1.2.3", - "lodash._reinterpolate": "^2.4.1", - "lodash.template": "^2.4.1", - "minimist": "^0.2.0", - "multipipe": "^0.1.0", - "through2": "^0.5.0", - "vinyl": "^0.2.1" - }, - "dependencies": { - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "through2": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "integrity": "sha512-zexCrAOTbjkBCXGyozn7hhS3aEaqdrc59mAD2E3dKYzV1vFuEGQ1hEDJN2oQMQFwy4he2zyLqPZV+AlfS8ZWJA==", - "dev": true, - "requires": { - "readable-stream": "~1.0.17", - "xtend": "~3.0.0" - } - }, - "vinyl": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", - "integrity": "sha512-4gFk9xrecazOTuFKcUYrE1TjHSYL63dio72D+q0d1mHF51FEcxTT2RHFpHbN5TNJgmPYHuVsBdhvXEOCDcytSA==", - "dev": true, - "requires": { - "clone-stats": "~0.0.1" - } - }, - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", - "dev": true - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha512-1YsTg1fk2/6JToQhtZkArMkurq8UoWU1Qe0aR3VUHjgij4nOylSWLWAtBXoZ4/dXOmugfLGm1c+QhuD0JyedFA==", - "dev": true, - "requires": { - "ansi-regex": "^0.2.0" - } - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "jsmin-sourcemap": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jsmin-sourcemap/-/jsmin-sourcemap-0.16.0.tgz", - "integrity": "sha512-/oJn++2sfbBa/5xLUGD22NwtJqxYbW7C0IpR9nZIAedg0MRuzWeCDd7CghYCSYGLLL9LsVNccQhgC4Ph+nmfww==", - "dev": true, - "requires": { - "jsmin2": "~1.1.1", - "source-map-index-generator": "~0.1.1" - } - }, - "jsmin2": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/jsmin2/-/jsmin2-1.1.9.tgz", - "integrity": "sha512-C1kkou9A0qYYWkrGbUFMx4IfO2RIysZC93Xo2CVrYr/ZKMiPj9gN+hJvI89LPQJF0RQOwjd1GSKfM4iGZlpMpw==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "optional": true - } - } - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "lodash._escapehtmlchar": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", - "integrity": "sha512-eHm2t2Lg476lq5v4FVmm3B5mCaRlDyTE8fnMfPCEq2o46G4au0qNXIKh7YWhjprm1zgSMLcMSs1XHMgkw02PbQ==", - "dev": true, - "requires": { - "lodash._htmlescapes": "~2.4.1" - } - }, - "lodash._escapestringchar": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", - "integrity": "sha512-iZ6Os4iipaE43pr9SBks+UpZgAjJgRC+lGf7onEoByMr1+Nagr1fmR7zCM6Q4RGMB/V3a57raEN0XZl7Uub3/g==", - "dev": true - }, - "lodash._htmlescapes": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", - "integrity": "sha512-g79hNmMOBVyV+4oKIHM7MWy9Awtk3yqf0Twlawr6f+CmG44nTwBh9I5XiLUnk39KTfYoDBpS66glQGgQCnFIuA==", - "dev": true - }, - "lodash._isnative": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", - "integrity": "sha512-BOlKGKNHhCHswGOWtmVb5zBygyxN7EmTuzVOSQI6QSoGhG+kvv71gICFS1TBpnqvT1n53txK8CDK3u5D2/GZxQ==", - "dev": true - }, - "lodash._objecttypes": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", - "integrity": "sha512-QGEOOjJi7W9LIgDAMVgtGBb8Qgo8ieDlSOCoZjtG45ZNRvDJZjwVMTYlfTIWdNRUiR1I9BjIqQ3Zaf1+DYM94g==", - "dev": true - }, - "lodash._reunescapedhtml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", - "integrity": "sha512-CfmZRU1Mk4E/5jh+Wu8lc7tuc3VkuwWZYVIgdPDH9NRSHgiL4Or3AA4JCIpgrkVzHOM+jKu2OMkAVquruhRHDQ==", - "dev": true, - "requires": { - "lodash._htmlescapes": "~2.4.1", - "lodash.keys": "~2.4.1" - } - }, - "lodash._shimkeys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", - "integrity": "sha512-lBrglYxLD/6KAJ8IEa5Lg+YHgNAL7FyKqXg4XOUI+Du/vtniLs1ZqS+yHNKPkK54waAgkdUnDOYaWf+rv4B+AA==", - "dev": true, - "requires": { - "lodash._objecttypes": "~2.4.1" - } - }, - "lodash.defaults": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", - "integrity": "sha512-5wTIPWwGGr07JFysAZB8+7JB2NjJKXDIwogSaRX5zED85zyUAQwtOqUk8AsJkkigUcL3akbHYXd5+BPtTGQPZw==", - "dev": true, - "requires": { - "lodash._objecttypes": "~2.4.1", - "lodash.keys": "~2.4.1" - } - }, - "lodash.escape": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", - "integrity": "sha512-PiEStyvZ8gz37qBE+HqME1Yc/ewb/59AMOu8pG7Ztani86foPTxgzckQvMdphmXPY6V5f20Ex/CaNBqHG4/ycQ==", - "dev": true, - "requires": { - "lodash._escapehtmlchar": "~2.4.1", - "lodash._reunescapedhtml": "~2.4.1", - "lodash.keys": "~2.4.1" - } - }, - "lodash.isobject": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", - "dev": true, - "requires": { - "lodash._objecttypes": "~2.4.1" - } - }, - "lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha512-ZpJhwvUXHSNL5wYd1RM6CUa2ZuqorG9ngoJ9Ix5Cce+uX7I5O/E06FCJdhSZ33b5dVyeQDnIlWH7B2s5uByZ7g==", - "dev": true, - "requires": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" - } - }, - "lodash.template": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", - "integrity": "sha512-5yLOQwlS69xbaez3g9dA1i0GMAj8pLDHp8lhA4V7M1vRam1lqD76f0jg5EV+65frbqrXo1WH9ZfKalfYBzJ5yQ==", - "dev": true, - "requires": { - "lodash._escapestringchar": "~2.4.1", - "lodash._reinterpolate": "~2.4.1", - "lodash.defaults": "~2.4.1", - "lodash.escape": "~2.4.1", - "lodash.keys": "~2.4.1", - "lodash.templatesettings": "~2.4.1", - "lodash.values": "~2.4.1" - } - }, - "lodash.templatesettings": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", - "integrity": "sha512-vY3QQ7GxbeLe8XfTvoYDbaMHO5iyTDJS1KIZrxp00PRMmyBKr8yEcObHSl2ppYTwd8MgqPXAarTvLA14hx8ffw==", - "dev": true, - "requires": { - "lodash._reinterpolate": "~2.4.1", - "lodash.escape": "~2.4.1" - } - }, - "lodash.values": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", - "integrity": "sha512-fQwubKvj2Nox2gy6YnjFm8C1I6MIlzKUtBB+Pj7JGtloGqDDL5CPRr4DUUFWPwXWwAl2k3f4C3Aw8H1qAPB9ww==", - "dev": true, - "requires": { - "lodash.keys": "~2.4.1" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - }, - "map-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.4.tgz", - "integrity": "sha512-Z7r7iyB+6s4kZzM6V0DjG9em/X1roScoUPL2n35gEzofAiQTuU575taNaE3h+h20cZGUfInxjtq9KX7bzBQaXA==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", - "requires": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.1.tgz", - "integrity": "sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "needle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz", - "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "optional": true - } - } - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "pell": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pell/-/pell-1.0.6.tgz", - "integrity": "sha512-wuackvgjFCHmVABy7ACSmY2u53w+TlYFrVL2hN6V3rGL/iWWwVXMw2uphpZSXNnqFQTI8nMpD3UNNX8+R4BAYw==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-index-generator": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/source-map-index-generator/-/source-map-index-generator-0.1.2.tgz", - "integrity": "sha512-WcpUz0VoY2gA0J3VQKpHkRK7dIBg0g/eY/vfhhB6Nxy6tmOUpDmRsr8SbbRA+lGv3ZrhKaHld/BA3z2ZN4jO4g==", - "dev": true, - "requires": { - "char-props": "~0.1.3", - "source-map": "~0.1.8" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha512-DerhZL7j6i6/nEnVG0qViKXI0OKouvvpsAiaj7c+LfqZZZxdwZtv8+UiA/w4VUJpT8UzX0pR1dcHOii1GbmruQ==", - "dev": true, - "requires": { - "ansi-regex": "^0.2.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha512-tdCZ28MnM7k7cJDJc7Eq80A9CsRFAAOZUy41npOZCs++qSjfIy7o5Rh46CBk+Dk5FbKJ33X3Tqg4YrV07N5RaA==", - "dev": true - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "temp-write": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-0.1.1.tgz", - "integrity": "sha512-m8xMOxqZB3/8I28A4Bz3BMO67k0jwkIrFQChxqV4XavpU9p3YJcidBEqJuc9oY60iSGW3qlCiM0xkq2FiQlpFw==", - "dev": true, - "requires": { - "graceful-fs": "~2.0.0", - "tempfile": "~0.1.2" - } - }, - "tempfile": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz", - "integrity": "sha512-eW5GbbQLBEpa21WNlpvJcvv/DNXLyMNOQBnhellCzQdXAf5Ctmrr8GDLc/YAymOF3t+17wmeE+kZCKBoaanEtA==", - "dev": true, - "requires": { - "uuid": "~1.4.0" - } - }, - "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dev": true, - "requires": { - "readable-stream": "2 || 3" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", - "dev": true, - "requires": { - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", - "dev": true - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "turndown": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.1.tgz", - "integrity": "sha512-BEkXaWH7Wh7e9bd2QumhfAXk5g34+6QUmmWx+0q6ThaVOLuLUqsnkq35HQ5SBHSaxjSfSM7US5o4lhJNH7B9MA==", - "requires": { - "domino": "^2.1.6" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true - }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz", - "integrity": "sha512-woV5Ei+GBJyrqMXt0mJ9p8/I+47LYKp/4urH76FNTMjl22EhLPz1tNrQufTsrFf/PYV/7ctSZYAK7fKPWQKg+Q==", - "dev": true - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - } - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", - "dev": true, - "requires": { - "source-map": "^0.5.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - } - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 4f553db0e..000000000 --- a/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "appwrite-server", - "version": "0.1.0", - "license": "BSD-3-Clause", - "repository": "public", - "scripts": { - "build": "npm run gulp:less && npm run gulp:import && npm run gulp:build", - "gulp:less": "gulp less", - "gulp:import": "gulp import", - "gulp:build": "gulp build" - }, - "devDependencies": { - "gulp": "^4.0.2", - "gulp-clean-css": "^4.3.0", - "gulp-concat": "^2.6.1", - "gulp-jsmin": "^0.1.5", - "gulp-less": "^5.0.0" - }, - "dependencies": { - "chart.js": "^3.8.2", - "markdown-it": "^13.0.1", - "pell": "^1.0.6", - "prismjs": "^1.28.0", - "turndown": "^7.1.1" - } -} From f9671ee855b7940480c43758f2246ff4d47cbb67 Mon Sep 17 00:00:00 2001 From: shimon Date: Thu, 10 Nov 2022 12:08:01 +0200 Subject: [PATCH 20/62] enabling file permissions via cache preview --- app/controllers/api/storage.php | 4 +- app/controllers/shared/api.php | 46 ++++++++++++- composer.lock | 111 +++++++++++++++++++++++++------- 3 files changed, 130 insertions(+), 31 deletions(-) diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index f23628574..514fa4a0e 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -783,6 +783,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') ->groups(['api', 'storage']) ->label('scope', 'files.read') ->label('cache', true) + ->label('cache.resourceType', 'bucket/{request.bucketId}') ->label('cache.resource', 'file/{request.fileId}') ->label('usage.metric', 'files.{scope}.requests.read') ->label('usage.params', ['bucketId:{request.bucketId}']) @@ -840,9 +841,6 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') $outputs = Config::getParam('storage-outputs'); $fileLogos = Config::getParam('storage-logos'); - $date = \date('D, d M Y H:i:s', \time() + (60 * 60 * 24 * 45)) . ' GMT'; // 45 days cache - $key = \md5($fileId . $width . $height . $gravity . $quality . $borderWidth . $borderColor . $borderRadius . $opacity . $rotation . $background . $output); - if ($fileSecurity && !$valid) { $file = $dbForProject->getDocument('bucket_' . $bucket->getInternalId(), $fileId); } else { diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index e07f40514..05dc2d211 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -167,13 +167,46 @@ App::init() ); $timestamp = 60 * 60 * 24 * 30; $data = $cache->load($key, $timestamp); + if (!empty($data)) { $data = json_decode($data, true); + $parts = explode('/', $data['resourceType']); + $type = $parts[0] ?? null; + + if ($type === 'bucket') { + $bucketId = $parts[1] ?? null; + + $bucket = Authorization::skip(fn () => $dbForProject->getDocument('buckets', $bucketId)); + + if ($bucket->isEmpty() || (!$bucket->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { + throw new Exception(Exception::STORAGE_BUCKET_NOT_FOUND); + } + + $fileSecurity = $bucket->getAttribute('fileSecurity', false); + $validator = new Authorization(Database::PERMISSION_READ); + $valid = $validator->isValid($bucket->getRead()); + if (!$fileSecurity && !$valid) { + throw new Exception(Exception::USER_UNAUTHORIZED); + } + + $parts = explode('/', $data['resource']); + $fileId = $parts[1] ?? null; + + if ($fileSecurity && !$valid) { + $file = $dbForProject->getDocument('bucket_' . $bucket->getInternalId(), $fileId); + } else { + $file = Authorization::skip(fn() => $dbForProject->getDocument('bucket_' . $bucket->getInternalId(), $fileId)); + } + + if ($file->isEmpty()) { + throw new Exception(Exception::STORAGE_FILE_NOT_FOUND); + } + } $response ->addHeader('Expires', \date('D, d M Y H:i:s', \time() + $timestamp) . ' GMT') ->addHeader('X-Appwrite-Cache', 'hit') - ->setContentType($data['content-type']) + ->setContentType($data['contentType']) ->send(base64_decode($data['payload'])) ; @@ -361,7 +394,7 @@ App::shutdown() */ $useCache = $route->getLabel('cache', false); if ($useCache) { - $resource = null; + $resource = $resourceType = null; $data = $response->getPayload(); if (!empty($data['payload'])) { @@ -370,9 +403,16 @@ App::shutdown() $resource = $parseLabel($pattern, $responsePayload, $requestParams, $user); } + $pattern = $route->getLabel('cache.resourceType', null); + if (!empty($pattern)) { + $resourceType = $parseLabel($pattern, $responsePayload, $requestParams, $user); + } + $key = md5($request->getURI() . implode('*', $request->getParams())); $data = json_encode([ - 'content-type' => $response->getContentType(), + 'resourceType' => $resourceType, + 'resource' => $resource, + 'contentType' => $response->getContentType(), 'payload' => base64_encode($data['payload']), ]) ; diff --git a/composer.lock b/composer.lock index 0c8ae5b33..1137e9d7e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "51f81d435f4b5b7a9a6ea8f81b470353", + "content-hash": "4ac687daa09a38688f27be6959ea42a5", "packages": [ { "name": "adhocore/jwt", @@ -115,15 +115,15 @@ }, { "name": "appwrite/php-runtimes", - "version": "0.11.0", + "version": "0.11.1", "source": { "type": "git", "url": "https://github.com/appwrite/runtimes.git", - "reference": "547fc026e11c0946846a8ac690898f5bf53be101" + "reference": "9d74a477ba3333cbcfac565c46fcf19606b7b603" }, "require": { "php": ">=8.0", - "utopia-php/system": "0.4.*" + "utopia-php/system": "0.6.*" }, "require-dev": { "phpunit/phpunit": "^9.3", @@ -154,7 +154,7 @@ "php", "runtimes" ], - "time": "2022-08-15T14:03:36+00:00" + "time": "2022-11-07T16:45:52+00:00" }, { "name": "chillerlan/php-qrcode", @@ -300,16 +300,16 @@ }, { "name": "colinmollenhour/credis", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/colinmollenhour/credis.git", - "reference": "85df015088e00daf8ce395189de22c8eb45c8d49" + "reference": "dccc8a46586475075fbb012d8bd523b8a938c2dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/85df015088e00daf8ce395189de22c8eb45c8d49", - "reference": "85df015088e00daf8ce395189de22c8eb45c8d49", + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/dccc8a46586475075fbb012d8bd523b8a938c2dc", + "reference": "dccc8a46586475075fbb012d8bd523b8a938c2dc", "shasum": "" }, "require": { @@ -341,9 +341,9 @@ "homepage": "https://github.com/colinmollenhour/credis", "support": { "issues": "https://github.com/colinmollenhour/credis/issues", - "source": "https://github.com/colinmollenhour/credis/tree/v1.13.1" + "source": "https://github.com/colinmollenhour/credis/tree/v1.14.0" }, - "time": "2022-06-20T22:56:59+00:00" + "time": "2022-11-09T01:18:39+00:00" }, { "name": "dragonmantank/cron-expression", @@ -803,6 +803,72 @@ }, "time": "2020-12-26T17:45:17+00:00" }, + { + "name": "laravel/pint", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/1d276e4c803397a26cc337df908f55c2a4e90d86", + "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11.0", + "illuminate/view": "^9.27", + "laravel-zero/framework": "^9.1.3", + "mockery/mockery": "^1.5.0", + "nunomaduro/larastan": "^2.2", + "nunomaduro/termwind": "^1.14.0", + "pestphp/pest": "^1.22.1" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2022-09-13T15:07:15+00:00" + }, { "name": "matomo/device-detector", "version": "6.0.0", @@ -2422,23 +2488,25 @@ }, { "name": "utopia-php/system", - "version": "0.4.0", + "version": "0.6.0", "source": { "type": "git", "url": "https://github.com/utopia-php/system.git", - "reference": "67c92c66ce8f0cc925a00bca89f7a188bf9183c0" + "reference": "289c4327713deadc9c748b5317d248133a02f245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/system/zipball/67c92c66ce8f0cc925a00bca89f7a188bf9183c0", - "reference": "67c92c66ce8f0cc925a00bca89f7a188bf9183c0", + "url": "https://api.github.com/repos/utopia-php/system/zipball/289c4327713deadc9c748b5317d248133a02f245", + "reference": "289c4327713deadc9c748b5317d248133a02f245", "shasum": "" }, "require": { + "laravel/pint": "1.2.*", "php": ">=7.4" }, "require-dev": { "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "^3.6", "vimeo/psalm": "4.0.1" }, "type": "library", @@ -2471,9 +2539,9 @@ ], "support": { "issues": "https://github.com/utopia-php/system/issues", - "source": "https://github.com/utopia-php/system/tree/0.4.0" + "source": "https://github.com/utopia-php/system/tree/0.6.0" }, - "time": "2021-02-04T14:14:49+00:00" + "time": "2022-11-07T13:51:59+00:00" }, { "name": "utopia-php/websocket", @@ -5118,14 +5186,7 @@ "time": "2022-09-28T08:42:51+00:00" } ], - "aliases": [ - { - "package": "utopia-php/database", - "version": "0.28.0.0", - "alias": "0.26.99", - "alias_normalized": "0.26.99.0" - } - ], + "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, From df791068d6dcceb59bffaa5526be55cce44a1b54 Mon Sep 17 00:00:00 2001 From: shimon Date: Thu, 10 Nov 2022 16:43:17 +0200 Subject: [PATCH 21/62] enabling cached file permissions validation via storage::preview --- .../Storage/StorageCustomClientTest.php | 157 ++++++++++++++---- 1 file changed, 128 insertions(+), 29 deletions(-) diff --git a/tests/e2e/Services/Storage/StorageCustomClientTest.php b/tests/e2e/Services/Storage/StorageCustomClientTest.php index b63de5648..fdb158ae5 100644 --- a/tests/e2e/Services/Storage/StorageCustomClientTest.php +++ b/tests/e2e/Services/Storage/StorageCustomClientTest.php @@ -25,10 +25,16 @@ class StorageCustomClientTest extends Scope use SideClient; use StoragePermissionsScope; - public function testBucketAnyPermissions(): void + public function testCachedFilePreview(): void { /** - * Test for SUCCESS + Create a bucket with File Level Security with no permissions. + Add a file with no permissions. + Login as UserA from SDK + Call File Preview from SDK all good userA can't see preview. + Add read permission to UserA, all good userA can now see preview. + Remove read permission for UserA. + Call File Preview from SDK and now userA can't see the preview. */ $bucket = $this->client->call(Client::METHOD_POST, '/storage/buckets', [ 'content-type' => 'application/json', @@ -37,22 +43,19 @@ class StorageCustomClientTest extends Scope ], [ 'bucketId' => ID::unique(), 'name' => 'Test Bucket', - 'permissions' => [ - Permission::read(Role::any()), - Permission::create(Role::any()), - Permission::update(Role::any()), - Permission::delete(Role::any()), - ], + 'fileSecurity' => true, + 'permissions' => [], ]); $bucketId = $bucket['body']['$id']; $this->assertEquals(201, $bucket['headers']['status-code']); $this->assertNotEmpty($bucketId); - $file = $this->client->call(Client::METHOD_POST, '/storage/buckets/' . $bucketId . '/files', [ + $file = $this->client->call(Client::METHOD_POST, '/storage/buckets/' . $bucketId . '/files', array_merge([ 'content-type' => 'multipart/form-data', 'x-appwrite-project' => $this->getProject()['$id'], - ], [ + 'x-appwrite-key' => $this->getProject()['apiKey'] + ]), [ 'fileId' => ID::unique(), 'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/logo.png'), 'image/png', 'permissions.png'), ]); @@ -65,46 +68,142 @@ class StorageCustomClientTest extends Scope $this->assertEquals('image/png', $file['body']['mimeType']); $this->assertEquals(47218, $file['body']['sizeOriginal']); - $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId, [ + $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/preview', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + + $this->assertEquals(404, $file['headers']['status-code']); + + $file = $this->client->call(Client::METHOD_PUT, '/storage/buckets/' . $bucketId . '/files/' . $fileId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ], [ + 'name' => 'permissions.png', + 'permissions' => [ + Permission::read(Role::user($this->getUser()['$id'])), + ], ]); $this->assertEquals(200, $file['headers']['status-code']); - $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/preview', [ + $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/preview', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], - ]); - - $this->assertEquals(200, $file['headers']['status-code']); - - $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/download', [ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], - ]); - - $this->assertEquals(200, $file['headers']['status-code']); - - $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/view', [ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], - ]); + ], $this->getHeaders())); $this->assertEquals(200, $file['headers']['status-code']); $file = $this->client->call(Client::METHOD_PUT, '/storage/buckets/' . $bucketId . '/files/' . $fileId, [ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], ], [ 'name' => 'permissions.png', + 'permissions' => [], + ]); + + $this->assertEquals(200, $file['headers']['status-code']); + + $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/preview', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + + $this->assertEquals(404, $file['headers']['status-code']); + + $file = $this->client->call(Client::METHOD_DELETE, '/storage/buckets/' . $bucketId . '/files/' . $fileId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ]); + + $this->assertEquals(204, $file['headers']['status-code']); + $this->assertEmpty($file['body']); + } + + public function testBucketAnyPermissions(): void + { + + /** + * Test for SUCCESS + */ + $bucket = $this->client->call(Client::METHOD_POST, '/storage/buckets', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ], [ + 'bucketId' => ID::unique(), + 'name' => 'Test Bucket', + 'permissions' => [ + Permission::read(Role::any()), + Permission::create(Role::any()), + Permission::update(Role::any()), + Permission::delete(Role::any()), + ], + ]); + + $bucketId = $bucket['body']['$id']; + $this->assertEquals(201, $bucket['headers']['status-code']); + $this->assertNotEmpty($bucketId); + + $file = $this->client->call(Client::METHOD_POST, '/storage/buckets/' . $bucketId . '/files', [ + 'content-type' => 'multipart/form-data', + 'x-appwrite-project' => $this->getProject()['$id'], + ], [ + 'fileId' => ID::unique(), + 'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/logo.png'), 'image/png', 'permissions.png'), + ]); + + $fileId = $file['body']['$id']; + $this->assertEquals($file['headers']['status-code'], 201); + $this->assertNotEmpty($fileId); + $this->assertEquals(true, DateTime::isValid($file['body']['$createdAt'])); + $this->assertEquals('permissions.png', $file['body']['name']); + $this->assertEquals('image/png', $file['body']['mimeType']); + $this->assertEquals(47218, $file['body']['sizeOriginal']); + + $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ]); + + $this->assertEquals(200, $file['headers']['status-code']); + + $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/preview', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ]); + + $this->assertEquals(200, $file['headers']['status-code']); + + $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/download', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ]); + + $this->assertEquals(200, $file['headers']['status-code']); + + $file = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId . '/files/' . $fileId . '/view', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ]); + + $this->assertEquals(200, $file['headers']['status-code']); + + $file = $this->client->call(Client::METHOD_PUT, '/storage/buckets/' . $bucketId . '/files/' . $fileId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], [ + 'name' => 'permissions.png', ]); $this->assertEquals(200, $file['headers']['status-code']); $file = $this->client->call(Client::METHOD_DELETE, '/storage/buckets/' . $bucketId . '/files/' . $fileId, [ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], ]); $this->assertEquals(204, $file['headers']['status-code']); From 7723762dd19d254e53ed94115c3207f72d473a47 Mon Sep 17 00:00:00 2001 From: shimon Date: Fri, 11 Nov 2022 12:41:41 +0200 Subject: [PATCH 22/62] cache buster added to cache key --- app/controllers/shared/api.php | 4 +- package-lock.json | 121 +++++++++++++++++---------------- 2 files changed, 64 insertions(+), 61 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 05dc2d211..487c2ac7d 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -161,7 +161,7 @@ App::init() $useCache = $route->getLabel('cache', false); if ($useCache) { - $key = md5($request->getURI() . implode('*', $request->getParams())); + $key = md5($request->getURI() . implode('*', $request->getParams())) . '*' . APP_CACHE_BUSTER; $cache = new Cache( new Filesystem(APP_STORAGE_CACHE . DIRECTORY_SEPARATOR . 'app-' . $project->getId()) ); @@ -408,7 +408,7 @@ App::shutdown() $resourceType = $parseLabel($pattern, $responsePayload, $requestParams, $user); } - $key = md5($request->getURI() . implode('*', $request->getParams())); + $key = md5($request->getURI() . implode('*', $request->getParams())) . '*' . APP_CACHE_BUSTER; $data = json_encode([ 'resourceType' => $resourceType, 'resource' => $resource, diff --git a/package-lock.json b/package-lock.json index 58949bf12..16932c2ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -433,12 +433,15 @@ } }, "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/buffer-from": { @@ -805,13 +808,10 @@ } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/copy-anything": { "version": "2.0.6", @@ -1540,9 +1540,9 @@ "dev": true }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "dependencies": { "function-bind": "^1.1.1", @@ -2196,9 +2196,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -2912,10 +2912,13 @@ } }, "node_modules/meow/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/micromatch": { "version": "3.1.10", @@ -3013,10 +3016,13 @@ } }, "node_modules/minimist": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.1.tgz", - "integrity": "sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==", - "dev": true + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.2.tgz", + "integrity": "sha512-g92kDfAOAszDRtHNagjZPPI/9lfOFaRBL/Ud6Z0RKZua/x+49awTydZLh5Gkhb80Xy5hmcvZNLGzscW5n5yd0g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -3080,9 +3086,9 @@ } }, "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true, "optional": true }, @@ -4854,9 +4860,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "node_modules/turndown": { @@ -5636,9 +5642,9 @@ } }, "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", "dev": true }, "buffer-from": { @@ -5941,13 +5947,10 @@ } }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "copy-anything": { "version": "2.0.6", @@ -6559,9 +6562,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -7092,9 +7095,9 @@ "dev": true }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -7693,9 +7696,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true } } @@ -7774,9 +7777,9 @@ } }, "minimist": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.1.tgz", - "integrity": "sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.2.tgz", + "integrity": "sha512-g92kDfAOAszDRtHNagjZPPI/9lfOFaRBL/Ud6Z0RKZua/x+49awTydZLh5Gkhb80Xy5hmcvZNLGzscW5n5yd0g==", "dev": true }, "mixin-deep": { @@ -7831,9 +7834,9 @@ "dev": true }, "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true, "optional": true }, @@ -9271,9 +9274,9 @@ "dev": true }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "turndown": { From f6b7e0392bd237fa46343b31904f1b5c486f5f58 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 09:15:55 +0000 Subject: [PATCH 23/62] Give auth duration it's own endpoint --- app/controllers/api/projects.php | 33 +++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index eaa113055..b06a7ea9e 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -376,10 +376,9 @@ App::patch('/v1/projects/:projectId') ->param('legalCity', '', new Text(256), 'Project legal city. Max length: 256 chars.', true) ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) - ->param('authDuration', 525600, new Range(0, 525600), 'Project session length in minutes. Max length: 525600 minutes.', true) ->inject('response') ->inject('dbForConsole') - ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, int $authDuration, Response $response, Database $dbForConsole) { + ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Response $response, Database $dbForConsole) { $project = $dbForConsole->getDocument('projects', $projectId); @@ -398,7 +397,6 @@ App::patch('/v1/projects/:projectId') ->setAttribute('legalCity', $legalCity) ->setAttribute('legalAddress', $legalAddress) ->setAttribute('legalTaxId', $legalTaxId) - ->setAttribute('authDuration', $authDuration * 60) ->setAttribute('search', implode(' ', [$projectId, $name]))); $response->dynamic($project, Response::MODEL_PROJECT); @@ -498,6 +496,35 @@ App::patch('/v1/projects/:projectId/auth/limit') $response->dynamic($project, Response::MODEL_PROJECT); }); + + +App::patch('/v1/projects/:projectId/auth/authDuration') + ->desc('Update Project Authentication Duration') + ->groups(['api', 'projects']) + ->label('scope', 'projects.write') + ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN]) + ->label('sdk.namespace', 'projects') + ->label('sdk.method', 'updateAuthDuration') + ->label('sdk.response.code', Response::STATUS_CODE_OK) + ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) + ->label('sdk.response.model', Response::MODEL_PROJECT) + ->param('projectId', '', new UID(), 'Project unique ID.') + ->param('authDuration', 525600, new Range(0, 525600), 'Project session length in minutes. Max length: 525600 minutes.') + ->inject('response') + ->inject('dbForConsole') + ->action(function (string $projectId, int $authDuration, Response $response, Database $dbForConsole) { + + $project = $dbForConsole->getDocument('projects', $projectId); + + if ($project->isEmpty()) { + throw new Exception(Exception::PROJECT_NOT_FOUND); + } + + $dbForConsole->updateDocument('projects', $project->getId(), $project + ->setAttribute('authDuration', $authDuration * 60)); + + $response->dynamic($project, Response::MODEL_PROJECT); + }); App::patch('/v1/projects/:projectId/auth/:method') ->desc('Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.') From 66b805829cfe30d3e4f3071a56db83bdb7ca52c3 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 09:30:45 +0000 Subject: [PATCH 24/62] Move authDuration into auths attribute in project --- app/controllers/api/account.php | 32 ++++++++++++++++++-------------- app/controllers/api/projects.php | 5 ++++- app/controllers/api/teams.php | 2 +- app/init.php | 6 ++++-- app/realtime.php | 3 ++- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 17da62405..6ce1153df 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -184,7 +184,7 @@ App::post('/v1/account/sessions/email') throw new Exception(Exception::USER_BLOCKED); // User is in status blocked } - $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); @@ -451,7 +451,8 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } $sessions = $user->getAttribute('sessions', []); - $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)); + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $current = Auth::sessionVerify($sessions, Auth::$secret, $authDuration); if ($current) { // Delete current session of new one. $currentDocument = $dbForProject->getDocument('sessions', $current); @@ -526,7 +527,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } // Create session token, verify user account and update OAuth2 ID and Access Token - $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -782,7 +783,7 @@ App::put('/v1/account/sessions/magic-url') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1019,7 +1020,7 @@ App::put('/v1/account/sessions/phone') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1171,7 +1172,7 @@ App::post('/v1/account/sessions/anonymous') ]))); // Create session token - $duration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1335,7 +1336,8 @@ App::get('/v1/account/sessions') ->action(function (Response $response, Document $user, Locale $locale, Document $project) { $sessions = $user->getAttribute('sessions', []); - $current = Auth::sessionVerify($sessions, Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)); + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $current = Auth::sessionVerify($sessions, Auth::$secret, $authDuration); foreach ($sessions as $key => $session) {/** @var Document $session */ $countryName = $locale->getText('countries.' . strtolower($session->getAttribute('countryCode')), $locale->getText('locale.country.unknown')); @@ -1434,8 +1436,9 @@ App::get('/v1/account/sessions/:sessionId') ->action(function (?string $sessionId, Response $response, Document $user, Locale $locale, Database $dbForProject, Document $project) { $sessions = $user->getAttribute('sessions', []); + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration) : $sessionId; foreach ($sessions as $session) {/** @var Document $session */ @@ -1445,7 +1448,7 @@ App::get('/v1/account/sessions/:sessionId') $session ->setAttribute('current', ($session->getAttribute('secret') == Auth::hash(Auth::$secret))) ->setAttribute('countryName', $countryName) - ->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG))) + ->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $authDuration)) ; return $response->dynamic($session, Response::MODEL_SESSION); @@ -1716,8 +1719,9 @@ App::delete('/v1/account/sessions/:sessionId') ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Event $events, Document $project) { $protocol = $request->getProtocol(); + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration) : $sessionId; $sessions = $user->getAttribute('sessions', []); @@ -1788,9 +1792,9 @@ App::patch('/v1/account/sessions/:sessionId') ->inject('locale') ->inject('events') ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Event $events) { - + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $sessionId = ($sessionId === 'current') - ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) + ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration) : $sessionId; $sessions = $user->getAttribute('sessions', []); @@ -1831,9 +1835,9 @@ App::patch('/v1/account/sessions/:sessionId') $dbForProject->deleteCachedDocument('users', $user->getId()); - $session->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG))); + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; - var_dump(DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG))); + $session->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $authDuration)); $events ->setParam('userId', $user->getId()) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index b06a7ea9e..b511f65cd 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -520,8 +520,11 @@ App::patch('/v1/projects/:projectId/auth/authDuration') throw new Exception(Exception::PROJECT_NOT_FOUND); } + $auths = $project->getAttribute('auths', []); + $auths['authDuration'] = $authDuration * 60; + $dbForConsole->updateDocument('projects', $project->getId(), $project - ->setAttribute('authDuration', $authDuration * 60)); + ->setAttribute('auths', $auths)); $response->dynamic($project, Response::MODEL_PROJECT); }); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index c39458ba5..03c908bef 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -732,7 +732,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $authDuration = $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG); + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $expire = DateTime::addSeconds(new \DateTime(), $authDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge([ diff --git a/app/init.php b/app/init.php index d162e643f..2ad771c15 100644 --- a/app/init.php +++ b/app/init.php @@ -835,9 +835,11 @@ App::setResource('user', function ($mode, $project, $console, $request, $respons $user = $dbForConsole->getDocument('users', Auth::$unique); } + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + if ( $user->isEmpty() // Check a document has been found in the DB - || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) + || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $authDuration) ) { // Validate user has valid login token $user = new Document(['$id' => ID::custom(''), '$collection' => 'users']); } @@ -917,9 +919,9 @@ App::setResource('console', function () { 'legalCity' => '', 'legalAddress' => '', 'legalTaxId' => '', - 'authDuration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, // 1 Year in seconds 'auths' => [ 'limit' => (App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled') === 'enabled') ? 1 : 0, // limit signup to 1 user + 'duration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, // 1 Year in seconds ], 'authWhitelistEmails' => (!empty(App::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null))) ? \explode(',', App::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null)) : [], 'authWhitelistIPs' => (!empty(App::getEnv('_APP_CONSOLE_WHITELIST_IPS', null))) ? \explode(',', App::getEnv('_APP_CONSOLE_WHITELIST_IPS', null)) : [], diff --git a/app/realtime.php b/app/realtime.php index 50f3ae05b..b616b1ed8 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -536,10 +536,11 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re Auth::$secret = $session['secret'] ?? ''; $user = $database->getDocument('users', Auth::$unique); + $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; if ( empty($user->getId()) // Check a document has been found in the DB - || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $project->getAttribute('authDuration', Auth::TOKEN_EXPIRATION_LOGIN_LONG)) // Validate user has valid login token + || !Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $authDuration) // Validate user has valid login token ) { // cookie not valid throw new Exception('Session is not valid.', 1003); From cdb4c60c3c2133e844f3b6b87b8b6eb3e5b30b2c Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 09:33:49 +0000 Subject: [PATCH 25/62] Run Linter --- app/controllers/api/projects.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index b511f65cd..a5d8c7067 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -496,7 +496,7 @@ App::patch('/v1/projects/:projectId/auth/limit') $response->dynamic($project, Response::MODEL_PROJECT); }); - + App::patch('/v1/projects/:projectId/auth/authDuration') ->desc('Update Project Authentication Duration') From 0b883df5eceb584db40700b6b7b1572e4fdfbd04 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 09:42:18 +0000 Subject: [PATCH 26/62] Fix Tests --- app/controllers/api/account.php | 22 +++++++++---------- app/controllers/api/projects.php | 6 ++--- app/controllers/api/teams.php | 2 +- app/init.php | 2 +- app/realtime.php | 2 +- .../Projects/ProjectsConsoleClientTest.php | 11 +++++----- 6 files changed, 22 insertions(+), 23 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 6ce1153df..115948f71 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -184,7 +184,7 @@ App::post('/v1/account/sessions/email') throw new Exception(Exception::USER_BLOCKED); // User is in status blocked } - $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); @@ -451,7 +451,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } $sessions = $user->getAttribute('sessions', []); - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $current = Auth::sessionVerify($sessions, Auth::$secret, $authDuration); if ($current) { // Delete current session of new one. @@ -527,7 +527,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } // Create session token, verify user account and update OAuth2 ID and Access Token - $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -783,7 +783,7 @@ App::put('/v1/account/sessions/magic-url') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1020,7 +1020,7 @@ App::put('/v1/account/sessions/phone') throw new Exception(Exception::USER_INVALID_TOKEN); } - $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1172,7 +1172,7 @@ App::post('/v1/account/sessions/anonymous') ]))); // Create session token - $duration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $duration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $secret = Auth::tokenGenerator(); @@ -1336,7 +1336,7 @@ App::get('/v1/account/sessions') ->action(function (Response $response, Document $user, Locale $locale, Document $project) { $sessions = $user->getAttribute('sessions', []); - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $current = Auth::sessionVerify($sessions, Auth::$secret, $authDuration); foreach ($sessions as $key => $session) {/** @var Document $session */ @@ -1436,7 +1436,7 @@ App::get('/v1/account/sessions/:sessionId') ->action(function (?string $sessionId, Response $response, Document $user, Locale $locale, Database $dbForProject, Document $project) { $sessions = $user->getAttribute('sessions', []); - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $sessionId = ($sessionId === 'current') ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration) : $sessionId; @@ -1719,7 +1719,7 @@ App::delete('/v1/account/sessions/:sessionId') ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Event $events, Document $project) { $protocol = $request->getProtocol(); - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $sessionId = ($sessionId === 'current') ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration) : $sessionId; @@ -1792,7 +1792,7 @@ App::patch('/v1/account/sessions/:sessionId') ->inject('locale') ->inject('events') ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Event $events) { - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $sessionId = ($sessionId === 'current') ? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration) : $sessionId; @@ -1835,7 +1835,7 @@ App::patch('/v1/account/sessions/:sessionId') $dbForProject->deleteCachedDocument('users', $user->getId()); - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $session->setAttribute('expire', DateTime::addSeconds(new \DateTime($session->getCreatedAt()), $authDuration)); diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index a5d8c7067..1a570aa79 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -509,10 +509,10 @@ App::patch('/v1/projects/:projectId/auth/authDuration') ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_PROJECT) ->param('projectId', '', new UID(), 'Project unique ID.') - ->param('authDuration', 525600, new Range(0, 525600), 'Project session length in minutes. Max length: 525600 minutes.') + ->param('duration', 525600, new Range(0, 525600), 'Project session length in minutes. Max length: 525600 minutes.') ->inject('response') ->inject('dbForConsole') - ->action(function (string $projectId, int $authDuration, Response $response, Database $dbForConsole) { + ->action(function (string $projectId, int $duration, Response $response, Database $dbForConsole) { $project = $dbForConsole->getDocument('projects', $projectId); @@ -521,7 +521,7 @@ App::patch('/v1/projects/:projectId/auth/authDuration') } $auths = $project->getAttribute('auths', []); - $auths['authDuration'] = $authDuration * 60; + $auths['duration'] = $duration * 60; $dbForConsole->updateDocument('projects', $project->getId(), $project ->setAttribute('auths', $auths)); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 03c908bef..dd214f562 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -732,7 +732,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; $expire = DateTime::addSeconds(new \DateTime(), $authDuration); $secret = Auth::tokenGenerator(); $session = new Document(array_merge([ diff --git a/app/init.php b/app/init.php index 2ad771c15..f928d2f53 100644 --- a/app/init.php +++ b/app/init.php @@ -835,7 +835,7 @@ App::setResource('user', function ($mode, $project, $console, $request, $respons $user = $dbForConsole->getDocument('users', Auth::$unique); } - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; if ( $user->isEmpty() // Check a document has been found in the DB diff --git a/app/realtime.php b/app/realtime.php index b616b1ed8..90c96de21 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -536,7 +536,7 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re Auth::$secret = $session['secret'] ?? ''; $user = $database->getDocument('users', Auth::$unique); - $authDuration = $project->getAttribute('auths', [])['authDuration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; + $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG; if ( empty($user->getId()) // Check a document has been found in the DB diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 6cf02af9a..11714fe75 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -403,13 +403,12 @@ class ProjectsConsoleClientTest extends Scope /** * Test for SUCCESS */ - $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id, array_merge([ + + $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id . '/auth/authDuration', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'projectId' => ID::unique(), - 'name' => 'Project Test 2', - 'authDuration' => '1', // Set session duration to 1 minute + 'duration' => '2', // Set session duration to 2 minutes ]); $this->assertEquals(200, $response['headers']['status-code']); @@ -418,7 +417,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertArrayHasKey('platforms', $response['body']); $this->assertArrayHasKey('webhooks', $response['body']); $this->assertArrayHasKey('keys', $response['body']); - $this->assertEquals(60, $response['body']['authDuration']); + $this->assertEquals(60, $response['body']['auths']['duration']); $projectId = $response['body']['$id']; @@ -490,7 +489,7 @@ class ProjectsConsoleClientTest extends Scope ], $this->getHeaders())); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(31536000, $response['body']['authDuration']); // 1 Year + $this->assertEquals(31536000, $response['body']['duration']); // 1 Year return ['projectId' => $projectId]; } From 36d4719a3b727a42ec6a9be6a579d11d874247fd Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 09:54:40 +0000 Subject: [PATCH 27/62] Update app/controllers/api/projects.php Co-authored-by: Eldad A. Fux --- app/controllers/api/projects.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 1a570aa79..f341566e4 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -113,7 +113,6 @@ App::post('/v1/projects') 'legalCity' => $legalCity, 'legalAddress' => $legalAddress, 'legalTaxId' => ID::custom($legalTaxId), - 'authDuration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG / 60, 'services' => new stdClass(), 'platforms' => null, 'authProviders' => [], From c76057fd37d666a106602491ad584fd5746afcbb Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 09:54:49 +0000 Subject: [PATCH 28/62] Update app/controllers/api/projects.php Co-authored-by: Eldad A. Fux --- app/controllers/api/projects.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index f341566e4..eee242527 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -497,7 +497,7 @@ App::patch('/v1/projects/:projectId/auth/limit') }); -App::patch('/v1/projects/:projectId/auth/authDuration') +App::patch('/v1/projects/:projectId/auth/duration') ->desc('Update Project Authentication Duration') ->groups(['api', 'projects']) ->label('scope', 'projects.write') From 43d4d6fec374cd6a05e6177073c9c5085387de5c Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 09:57:37 +0000 Subject: [PATCH 29/62] Address Eldad's Comments --- app/config/collections.php | 11 ----------- src/Appwrite/Utopia/Response/Model/Project.php | 1 + tests/e2e/Scopes/ProjectCustom.php | 1 - 3 files changed, 1 insertion(+), 12 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 43044cf58..ef515aeb5 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -633,17 +633,6 @@ $collections = [ 'array' => false, 'filters' => [], ], - [ - '$id' => ID::custom('authDuration'), - 'type' => Database::VAR_INTEGER, - 'format' => '', - 'size' => 32, - 'signed' => true, - 'required' => false, - 'default' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, // 1 Year - 'array' => false, - 'filters' => [], - ], [ '$id' => ID::custom('services'), 'type' => Database::VAR_STRING, diff --git a/src/Appwrite/Utopia/Response/Model/Project.php b/src/Appwrite/Utopia/Response/Model/Project.php index 1801be0ba..f00d37c6e 100644 --- a/src/Appwrite/Utopia/Response/Model/Project.php +++ b/src/Appwrite/Utopia/Response/Model/Project.php @@ -246,6 +246,7 @@ class Project extends Model $auth = Config::getParam('auth', []); $document->setAttribute('authLimit', $authValues['limit'] ?? 0); + $document->setAttribute('authDuration', $authValues['duration'] ?? 0); foreach ($auth as $index => $method) { $key = $method['key']; diff --git a/tests/e2e/Scopes/ProjectCustom.php b/tests/e2e/Scopes/ProjectCustom.php index 33e1820a6..0a0c0a11a 100644 --- a/tests/e2e/Scopes/ProjectCustom.php +++ b/tests/e2e/Scopes/ProjectCustom.php @@ -53,7 +53,6 @@ trait ProjectCustom 'legalCity' => '', 'legalAddress' => '', 'legalTaxId' => '', - 'authDuration' => 525600 ]); $this->assertEquals(201, $project['headers']['status-code']); From 60a63d9eb9ed7c5344c913f344401e77e6f5acc7 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 11:43:28 +0000 Subject: [PATCH 30/62] Update ProjectsConsoleClientTest.php --- tests/e2e/Services/Projects/ProjectsConsoleClientTest.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 11714fe75..0851359b9 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -471,12 +471,11 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(401, $response['headers']['status-code']); // Return project back to normal - $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id, array_merge([ + $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id . '/auth/authDuration', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'projectId' => ID::unique(), - 'name' => 'Project Test 2' + 'duration' => 525600, ]); $this->assertEquals(200, $response['headers']['status-code']); From 6260a1a156d81444c9fa4a2f258cd28e40533460 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 14 Nov 2022 13:00:50 +0000 Subject: [PATCH 31/62] change authDuration to duration and update tests --- .../Services/Projects/ProjectsConsoleClientTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 0851359b9..ecd3fd69d 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -404,11 +404,11 @@ class ProjectsConsoleClientTest extends Scope * Test for SUCCESS */ - $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id . '/auth/authDuration', array_merge([ + $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id . '/auth/duration', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'duration' => '2', // Set session duration to 2 minutes + 'duration' => '1', // Set session duration to 2 minutes ]); $this->assertEquals(200, $response['headers']['status-code']); @@ -417,7 +417,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertArrayHasKey('platforms', $response['body']); $this->assertArrayHasKey('webhooks', $response['body']); $this->assertArrayHasKey('keys', $response['body']); - $this->assertEquals(60, $response['body']['auths']['duration']); + $this->assertEquals(60, $response['body']['authDuration']); $projectId = $response['body']['$id']; @@ -471,7 +471,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(401, $response['headers']['status-code']); // Return project back to normal - $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id . '/auth/authDuration', array_merge([ + $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $id . '/auth/duration', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ @@ -488,7 +488,7 @@ class ProjectsConsoleClientTest extends Scope ], $this->getHeaders())); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(31536000, $response['body']['duration']); // 1 Year + $this->assertEquals(31536000, $response['body']['authDuration']); // 1 Year return ['projectId' => $projectId]; } From 465dad522ede33b0911b64e706d250f835be7822 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 14 Nov 2022 15:31:24 +0100 Subject: [PATCH 32/62] fix: remove unnecessary files --- Dockerfile | 2 - .../dbip}/dbip-country-lite-2022-06.mmdb | Bin .../assets}/fonts/poppins-v9-latin-500.ttf | Bin app/config/specs/open-api3-latest-client.json | 2 +- .../specs/open-api3-latest-console.json | 2 +- app/config/specs/open-api3-latest-server.json | 2 +- app/config/specs/swagger2-latest-client.json | 2 +- app/config/specs/swagger2-latest-console.json | 2 +- app/config/specs/swagger2-latest-server.json | 2 +- app/console | 2 +- app/controllers/api/avatars.php | 4 +- app/init.php | 2 +- public/dist/scripts/app-all.js | 4193 ---------- public/dist/scripts/app-dep.js | 3410 -------- public/dist/scripts/app.js | 783 -- public/dist/styles/default-ltr.css | 1 - public/dist/styles/default-rtl.css | 1 - public/fonts/icon.eot | Bin 38880 -> 0 bytes public/fonts/icon.svg | 414 - public/fonts/icon.symbol.svg | 3 - public/fonts/icon.ttf | Bin 38728 -> 0 bytes public/fonts/icon.woff | Bin 24864 -> 0 bytes public/fonts/icon.woff2 | Bin 21796 -> 0 bytes public/fonts/poppins-v9-latin-100.eot | Bin 8255 -> 0 bytes public/fonts/poppins-v9-latin-100.svg | 324 - public/fonts/poppins-v9-latin-100.ttf | Bin 16108 -> 0 bytes public/fonts/poppins-v9-latin-100.woff | Bin 9956 -> 0 bytes public/fonts/poppins-v9-latin-100.woff2 | Bin 7440 -> 0 bytes public/fonts/poppins-v9-latin-300.eot | Bin 8762 -> 0 bytes public/fonts/poppins-v9-latin-300.svg | 320 - public/fonts/poppins-v9-latin-300.ttf | Bin 15896 -> 0 bytes public/fonts/poppins-v9-latin-300.woff | Bin 10500 -> 0 bytes public/fonts/poppins-v9-latin-300.woff2 | Bin 7988 -> 0 bytes public/fonts/poppins-v9-latin-500.eot | Bin 8799 -> 0 bytes public/fonts/poppins-v9-latin-500.svg | 322 - public/fonts/poppins-v9-latin-500.woff | Bin 10512 -> 0 bytes public/fonts/poppins-v9-latin-500.woff2 | Bin 7960 -> 0 bytes public/fonts/poppins-v9-latin-600.eot | Bin 8713 -> 0 bytes public/fonts/poppins-v9-latin-600.svg | 321 - public/fonts/poppins-v9-latin-600.ttf | Bin 15676 -> 0 bytes public/fonts/poppins-v9-latin-600.woff | Bin 10456 -> 0 bytes public/fonts/poppins-v9-latin-600.woff2 | Bin 7836 -> 0 bytes public/fonts/poppins-v9-latin-regular.eot | Bin 8763 -> 0 bytes public/fonts/poppins-v9-latin-regular.svg | 323 - public/fonts/poppins-v9-latin-regular.ttf | Bin 15860 -> 0 bytes public/fonts/poppins-v9-latin-regular.woff | Bin 10484 -> 0 bytes public/fonts/poppins-v9-latin-regular.woff2 | Bin 7968 -> 0 bytes .../source-code-pro-v11-latin-regular.eot | Bin 16407 -> 0 bytes .../source-code-pro-v11-latin-regular.svg | 341 - .../source-code-pro-v11-latin-regular.ttf | Bin 33148 -> 0 bytes .../source-code-pro-v11-latin-regular.woff | Bin 18008 -> 0 bytes .../source-code-pro-v11-latin-regular.woff2 | Bin 14172 -> 0 bytes public/images/apple.png | Bin 17663 -> 0 bytes public/images/appwrite-footer-dark.svg | 2 - public/images/appwrite-footer-light.svg | 2 - public/images/appwrite-nav.svg | 2 - public/images/appwrite-white.svg | 2 - public/images/appwrite.svg | 2 - public/images/clients/android.png | Bin 26647 -> 0 bytes public/images/clients/apple-ios.png | Bin 21193 -> 0 bytes public/images/clients/apple-macos.png | Bin 30712 -> 0 bytes public/images/clients/apple-tvos.png | Bin 44737 -> 0 bytes public/images/clients/apple-watchos.png | Bin 59054 -> 0 bytes public/images/clients/apple.png | Bin 48182 -> 0 bytes public/images/clients/flutter-android.png | Bin 26647 -> 0 bytes public/images/clients/flutter-ios.png | Bin 21193 -> 0 bytes public/images/clients/flutter-linux.png | Bin 18077 -> 0 bytes public/images/clients/flutter-macos.png | Bin 30712 -> 0 bytes public/images/clients/flutter-windows.png | Bin 13819 -> 0 bytes public/images/clients/flutter.png | Bin 13563 -> 0 bytes public/images/clients/linux.png | Bin 18077 -> 0 bytes public/images/clients/servers.png | Bin 13362 -> 0 bytes public/images/clients/terminal.png | Bin 16729 -> 0 bytes public/images/clients/unity.png | Bin 14586 -> 0 bytes public/images/clients/web.png | Bin 10662 -> 0 bytes public/images/clients/windows.png | Bin 13819 -> 0 bytes public/images/console.png | Bin 225615 -> 0 bytes public/images/default_preview.svg | 3 - public/images/favicon.png | Bin 38962 -> 0 bytes public/images/github-logo.png | Bin 37397 -> 0 bytes public/images/github.png | Bin 2331354 -> 0 bytes public/images/icon-nav.svg | 1 - public/images/icon.svg | 1 - .../images/integrations/digitalocean-logo.svg | 27 - public/images/integrations/gitpod-logo.svg | 9 - public/images/logo.png | Bin 506552 -> 0 bytes public/images/runtimes/cpp.png | Bin 34140 -> 0 bytes public/images/runtimes/dart.png | Bin 16072 -> 0 bytes public/images/runtimes/deno.png | Bin 26734 -> 0 bytes public/images/runtimes/dotnet.png | Bin 5079 -> 0 bytes public/images/runtimes/java.png | Bin 43144 -> 0 bytes public/images/runtimes/kotlin.png | Bin 25850 -> 0 bytes public/images/runtimes/node.png | Bin 41982 -> 0 bytes public/images/runtimes/php.png | Bin 24901 -> 0 bytes public/images/runtimes/python.png | Bin 38802 -> 0 bytes public/images/runtimes/ruby.png | Bin 79307 -> 0 bytes public/images/runtimes/rust.png | Bin 40894 -> 0 bytes public/images/runtimes/swift.png | Bin 17842 -> 0 bytes public/images/services/account.png | Bin 3972 -> 0 bytes public/images/services/avatars.png | Bin 3283 -> 0 bytes public/images/services/databases.png | Bin 4598 -> 0 bytes public/images/services/functions.png | Bin 3920 -> 0 bytes public/images/services/health.png | Bin 4498 -> 0 bytes public/images/services/locale.png | Bin 3062 -> 0 bytes public/images/services/storage.png | Bin 2918 -> 0 bytes public/images/services/teams.png | Bin 4275 -> 0 bytes public/images/services/users.png | Bin 4465 -> 0 bytes public/images/sponsorship.svg | 29 - public/images/unknown.svg | 3 - public/images/users/amazon.png | Bin 4914 -> 0 bytes public/images/users/anonymous.png | Bin 4361 -> 0 bytes public/images/users/apple.png | Bin 3582 -> 0 bytes public/images/users/auth0.png | Bin 2512 -> 0 bytes public/images/users/authentik.png | Bin 827 -> 0 bytes public/images/users/autodesk.png | Bin 1278 -> 0 bytes public/images/users/bitbucket.png | Bin 6826 -> 0 bytes public/images/users/bitly.png | Bin 5489 -> 0 bytes public/images/users/box.png | Bin 4109 -> 0 bytes public/images/users/dailymotion.png | Bin 395 -> 0 bytes public/images/users/discord.png | Bin 4166 -> 0 bytes public/images/users/disqus.png | Bin 2769 -> 0 bytes public/images/users/dropbox.png | Bin 7524 -> 0 bytes public/images/users/email.png | Bin 3795 -> 0 bytes public/images/users/etsy.png | Bin 5731 -> 0 bytes public/images/users/facebook.png | Bin 3629 -> 0 bytes public/images/users/github.png | Bin 4927 -> 0 bytes public/images/users/gitlab.png | Bin 5382 -> 0 bytes public/images/users/google.png | Bin 6684 -> 0 bytes public/images/users/invites.png | Bin 3682 -> 0 bytes public/images/users/jwt.png | Bin 5970 -> 0 bytes public/images/users/linkedin.png | Bin 3949 -> 0 bytes public/images/users/magic-url.png | Bin 2328 -> 0 bytes public/images/users/microsoft.png | Bin 5040 -> 0 bytes public/images/users/notion.png | Bin 1834 -> 0 bytes public/images/users/okta.png | Bin 7408 -> 0 bytes public/images/users/paypal.png | Bin 4015 -> 0 bytes public/images/users/paypalsandbox.png | Bin 4015 -> 0 bytes public/images/users/phone.png | Bin 3631 -> 0 bytes public/images/users/podio.png | Bin 1947 -> 0 bytes public/images/users/salesforce.png | Bin 3569 -> 0 bytes public/images/users/slack.png | Bin 6158 -> 0 bytes public/images/users/spotify.png | Bin 5773 -> 0 bytes public/images/users/stripe.png | Bin 6812 -> 0 bytes public/images/users/tradeshift.png | Bin 8001 -> 0 bytes public/images/users/tradeshiftbox.png | Bin 8001 -> 0 bytes public/images/users/twitch.png | Bin 3374 -> 0 bytes public/images/users/twitter.png | Bin 3227 -> 0 bytes public/images/users/wordpress.png | Bin 4826 -> 0 bytes public/images/users/yahoo.png | Bin 3802 -> 0 bytes public/images/users/yammer.png | Bin 4840 -> 0 bytes public/images/users/yandex.png | Bin 3029 -> 0 bytes public/images/users/zoom.png | Bin 15559 -> 0 bytes public/scripts/app.js | 63 - public/scripts/dependencies/alpine.js | 2697 ------- public/scripts/dependencies/appwrite.js | 7067 ----------------- public/scripts/dependencies/litespeed.js | 142 - public/scripts/events.js | 217 - public/scripts/filters.js | 365 - public/scripts/init.js | 167 - public/scripts/permissions-matrix.js | 141 - public/scripts/routes.js | 257 - public/scripts/services/alerts.js | 57 - public/scripts/services/api.js | 201 - public/scripts/services/console.js | 29 - public/scripts/services/date.js | 21 - public/scripts/services/env.js | 8 - public/scripts/services/form.js | 166 - public/scripts/services/markdown.js | 21 - public/scripts/services/realtime.js | 20 - public/scripts/services/rtl.js | 31 - public/scripts/services/sdk.js | 29 - public/scripts/services/search.js | 12 - public/scripts/services/timezone.js | 16 - public/scripts/upload-modal.js | 157 - public/scripts/views/analytics/activity.js | 23 - public/scripts/views/analytics/event.js | 32 - public/scripts/views/analytics/pageview.js | 28 - public/scripts/views/forms/add.js | 46 - public/scripts/views/forms/chart-bar.js | 42 - public/scripts/views/forms/chart.js | 159 - public/scripts/views/forms/clone.js | 116 - public/scripts/views/forms/code.js | 73 - public/scripts/views/forms/color.js | 42 - public/scripts/views/forms/copy.js | 41 - public/scripts/views/forms/custom-id.js | 152 - .../scripts/views/forms/document-preview.js | 14 - public/scripts/views/forms/document.js | 25 - public/scripts/views/forms/duplications.js | 39 - public/scripts/views/forms/filter.js | 169 - public/scripts/views/forms/headers.js | 59 - public/scripts/views/forms/ip-address.js | 16 - public/scripts/views/forms/key-value.js | 57 - public/scripts/views/forms/move-down.js | 20 - public/scripts/views/forms/move-up.js | 20 - public/scripts/views/forms/nav.js | 44 - public/scripts/views/forms/oauth-custom.js | 90 - public/scripts/views/forms/password-meter.js | 60 - public/scripts/views/forms/pell.js | 152 - public/scripts/views/forms/remove.js | 17 - public/scripts/views/forms/required.js | 15 - public/scripts/views/forms/run.js | 15 - public/scripts/views/forms/select-all.js | 53 - public/scripts/views/forms/selected.js | 16 - public/scripts/views/forms/show-secret.js | 39 - public/scripts/views/forms/switch.js | 44 - public/scripts/views/forms/tags.js | 122 - public/scripts/views/forms/text-count.js | 36 - public/scripts/views/forms/text-direction.js | 31 - public/scripts/views/forms/text-resize.js | 42 - public/scripts/views/forms/upload.js | 178 - public/scripts/views/general/cookies.js | 23 - public/scripts/views/general/copy.js | 44 - public/scripts/views/general/page-title.js | 11 - .../scripts/views/general/scroll-direction.js | 45 - public/scripts/views/general/scroll-to.js | 23 - public/scripts/views/general/setup.js | 44 - public/scripts/views/general/switch.js | 22 - public/scripts/views/general/theme.js | 23 - public/scripts/views/general/version.js | 47 - public/scripts/views/paging/back.js | 44 - public/scripts/views/paging/next.js | 48 - public/scripts/views/service.js | 452 -- public/scripts/views/ui/highlight.js | 54 - public/scripts/views/ui/loader.js | 10 - public/scripts/views/ui/modal.js | 143 - public/scripts/views/ui/open.js | 133 - public/scripts/views/ui/phases.js | 137 - public/scripts/views/ui/trigger.js | 21 - public/styles/comps/alerts.less | 157 - public/styles/comps/article.less | 81 - public/styles/comps/avatar.less | 73 - public/styles/comps/box.less | 378 - public/styles/comps/cover.less | 52 - public/styles/comps/database.less | 164 - public/styles/comps/events.less | 20 - public/styles/comps/footer.less | 48 - public/styles/comps/header.less | 108 - public/styles/comps/loader.less | 147 - public/styles/comps/modal.less | 200 - public/styles/comps/permissions-matrix.less | 23 - public/styles/comps/pill.less | 15 - public/styles/comps/preview-box.less | 21 - public/styles/comps/scroll.less | 32 - public/styles/comps/tabs.less | 130 - public/styles/comps/upload-box.less | 115 - public/styles/default-ltr.less | 62 - public/styles/default-rtl.less | 83 - public/styles/default.less | 63 - public/styles/fonts.less | 83 - public/styles/forms.less | 1398 ---- public/styles/functions.less | 261 - public/styles/grid.less | 333 - public/styles/icons.less | 179 - public/styles/ide.less | 354 - public/styles/polyfills.less | 88 - public/styles/responsive.less | 48 - public/styles/scopes/console.less | 1080 --- public/styles/scopes/home.less | 31 - public/styles/tabels.less | 216 - public/styles/themes.less | 212 - public/styles/typography.less | 244 - public/styles/utilities.less | 7 - 262 files changed, 10 insertions(+), 32692 deletions(-) rename app/{db/DBIP => assets/dbip}/dbip-country-lite-2022-06.mmdb (100%) rename {public => app/assets}/fonts/poppins-v9-latin-500.ttf (100%) delete mode 100644 public/dist/scripts/app-all.js delete mode 100644 public/dist/scripts/app-dep.js delete mode 100644 public/dist/scripts/app.js delete mode 100644 public/dist/styles/default-ltr.css delete mode 100644 public/dist/styles/default-rtl.css delete mode 100644 public/fonts/icon.eot delete mode 100644 public/fonts/icon.svg delete mode 100644 public/fonts/icon.symbol.svg delete mode 100644 public/fonts/icon.ttf delete mode 100644 public/fonts/icon.woff delete mode 100644 public/fonts/icon.woff2 delete mode 100644 public/fonts/poppins-v9-latin-100.eot delete mode 100644 public/fonts/poppins-v9-latin-100.svg delete mode 100644 public/fonts/poppins-v9-latin-100.ttf delete mode 100644 public/fonts/poppins-v9-latin-100.woff delete mode 100644 public/fonts/poppins-v9-latin-100.woff2 delete mode 100644 public/fonts/poppins-v9-latin-300.eot delete mode 100644 public/fonts/poppins-v9-latin-300.svg delete mode 100644 public/fonts/poppins-v9-latin-300.ttf delete mode 100644 public/fonts/poppins-v9-latin-300.woff delete mode 100644 public/fonts/poppins-v9-latin-300.woff2 delete mode 100644 public/fonts/poppins-v9-latin-500.eot delete mode 100644 public/fonts/poppins-v9-latin-500.svg delete mode 100644 public/fonts/poppins-v9-latin-500.woff delete mode 100644 public/fonts/poppins-v9-latin-500.woff2 delete mode 100644 public/fonts/poppins-v9-latin-600.eot delete mode 100644 public/fonts/poppins-v9-latin-600.svg delete mode 100644 public/fonts/poppins-v9-latin-600.ttf delete mode 100644 public/fonts/poppins-v9-latin-600.woff delete mode 100644 public/fonts/poppins-v9-latin-600.woff2 delete mode 100644 public/fonts/poppins-v9-latin-regular.eot delete mode 100644 public/fonts/poppins-v9-latin-regular.svg delete mode 100644 public/fonts/poppins-v9-latin-regular.ttf delete mode 100644 public/fonts/poppins-v9-latin-regular.woff delete mode 100644 public/fonts/poppins-v9-latin-regular.woff2 delete mode 100644 public/fonts/source-code-pro-v11-latin-regular.eot delete mode 100644 public/fonts/source-code-pro-v11-latin-regular.svg delete mode 100644 public/fonts/source-code-pro-v11-latin-regular.ttf delete mode 100644 public/fonts/source-code-pro-v11-latin-regular.woff delete mode 100644 public/fonts/source-code-pro-v11-latin-regular.woff2 delete mode 100644 public/images/apple.png delete mode 100644 public/images/appwrite-footer-dark.svg delete mode 100644 public/images/appwrite-footer-light.svg delete mode 100644 public/images/appwrite-nav.svg delete mode 100644 public/images/appwrite-white.svg delete mode 100644 public/images/appwrite.svg delete mode 100644 public/images/clients/android.png delete mode 100644 public/images/clients/apple-ios.png delete mode 100644 public/images/clients/apple-macos.png delete mode 100644 public/images/clients/apple-tvos.png delete mode 100644 public/images/clients/apple-watchos.png delete mode 100644 public/images/clients/apple.png delete mode 100644 public/images/clients/flutter-android.png delete mode 100644 public/images/clients/flutter-ios.png delete mode 100644 public/images/clients/flutter-linux.png delete mode 100644 public/images/clients/flutter-macos.png delete mode 100644 public/images/clients/flutter-windows.png delete mode 100644 public/images/clients/flutter.png delete mode 100644 public/images/clients/linux.png delete mode 100644 public/images/clients/servers.png delete mode 100644 public/images/clients/terminal.png delete mode 100644 public/images/clients/unity.png delete mode 100644 public/images/clients/web.png delete mode 100644 public/images/clients/windows.png delete mode 100644 public/images/console.png delete mode 100644 public/images/default_preview.svg delete mode 100644 public/images/favicon.png delete mode 100644 public/images/github-logo.png delete mode 100644 public/images/github.png delete mode 100644 public/images/icon-nav.svg delete mode 100644 public/images/icon.svg delete mode 100755 public/images/integrations/digitalocean-logo.svg delete mode 100644 public/images/integrations/gitpod-logo.svg delete mode 100644 public/images/logo.png delete mode 100644 public/images/runtimes/cpp.png delete mode 100644 public/images/runtimes/dart.png delete mode 100644 public/images/runtimes/deno.png delete mode 100644 public/images/runtimes/dotnet.png delete mode 100644 public/images/runtimes/java.png delete mode 100644 public/images/runtimes/kotlin.png delete mode 100644 public/images/runtimes/node.png delete mode 100644 public/images/runtimes/php.png delete mode 100644 public/images/runtimes/python.png delete mode 100644 public/images/runtimes/ruby.png delete mode 100644 public/images/runtimes/rust.png delete mode 100644 public/images/runtimes/swift.png delete mode 100644 public/images/services/account.png delete mode 100644 public/images/services/avatars.png delete mode 100644 public/images/services/databases.png delete mode 100644 public/images/services/functions.png delete mode 100644 public/images/services/health.png delete mode 100644 public/images/services/locale.png delete mode 100644 public/images/services/storage.png delete mode 100644 public/images/services/teams.png delete mode 100644 public/images/services/users.png delete mode 100644 public/images/sponsorship.svg delete mode 100644 public/images/unknown.svg delete mode 100644 public/images/users/amazon.png delete mode 100644 public/images/users/anonymous.png delete mode 100644 public/images/users/apple.png delete mode 100644 public/images/users/auth0.png delete mode 100644 public/images/users/authentik.png delete mode 100644 public/images/users/autodesk.png delete mode 100644 public/images/users/bitbucket.png delete mode 100644 public/images/users/bitly.png delete mode 100644 public/images/users/box.png delete mode 100644 public/images/users/dailymotion.png delete mode 100644 public/images/users/discord.png delete mode 100644 public/images/users/disqus.png delete mode 100644 public/images/users/dropbox.png delete mode 100644 public/images/users/email.png delete mode 100644 public/images/users/etsy.png delete mode 100644 public/images/users/facebook.png delete mode 100644 public/images/users/github.png delete mode 100644 public/images/users/gitlab.png delete mode 100644 public/images/users/google.png delete mode 100644 public/images/users/invites.png delete mode 100644 public/images/users/jwt.png delete mode 100644 public/images/users/linkedin.png delete mode 100644 public/images/users/magic-url.png delete mode 100644 public/images/users/microsoft.png delete mode 100644 public/images/users/notion.png delete mode 100644 public/images/users/okta.png delete mode 100644 public/images/users/paypal.png delete mode 100644 public/images/users/paypalsandbox.png delete mode 100644 public/images/users/phone.png delete mode 100644 public/images/users/podio.png delete mode 100644 public/images/users/salesforce.png delete mode 100644 public/images/users/slack.png delete mode 100644 public/images/users/spotify.png delete mode 100644 public/images/users/stripe.png delete mode 100644 public/images/users/tradeshift.png delete mode 100644 public/images/users/tradeshiftbox.png delete mode 100644 public/images/users/twitch.png delete mode 100644 public/images/users/twitter.png delete mode 100644 public/images/users/wordpress.png delete mode 100644 public/images/users/yahoo.png delete mode 100644 public/images/users/yammer.png delete mode 100644 public/images/users/yandex.png delete mode 100644 public/images/users/zoom.png delete mode 100644 public/scripts/app.js delete mode 100644 public/scripts/dependencies/alpine.js delete mode 100644 public/scripts/dependencies/appwrite.js delete mode 100644 public/scripts/dependencies/litespeed.js delete mode 100644 public/scripts/events.js delete mode 100644 public/scripts/filters.js delete mode 100644 public/scripts/init.js delete mode 100644 public/scripts/permissions-matrix.js delete mode 100644 public/scripts/routes.js delete mode 100644 public/scripts/services/alerts.js delete mode 100644 public/scripts/services/api.js delete mode 100644 public/scripts/services/console.js delete mode 100644 public/scripts/services/date.js delete mode 100644 public/scripts/services/env.js delete mode 100644 public/scripts/services/form.js delete mode 100644 public/scripts/services/markdown.js delete mode 100644 public/scripts/services/realtime.js delete mode 100644 public/scripts/services/rtl.js delete mode 100644 public/scripts/services/sdk.js delete mode 100644 public/scripts/services/search.js delete mode 100644 public/scripts/services/timezone.js delete mode 100644 public/scripts/upload-modal.js delete mode 100644 public/scripts/views/analytics/activity.js delete mode 100644 public/scripts/views/analytics/event.js delete mode 100644 public/scripts/views/analytics/pageview.js delete mode 100644 public/scripts/views/forms/add.js delete mode 100644 public/scripts/views/forms/chart-bar.js delete mode 100644 public/scripts/views/forms/chart.js delete mode 100644 public/scripts/views/forms/clone.js delete mode 100644 public/scripts/views/forms/code.js delete mode 100644 public/scripts/views/forms/color.js delete mode 100644 public/scripts/views/forms/copy.js delete mode 100644 public/scripts/views/forms/custom-id.js delete mode 100644 public/scripts/views/forms/document-preview.js delete mode 100644 public/scripts/views/forms/document.js delete mode 100644 public/scripts/views/forms/duplications.js delete mode 100644 public/scripts/views/forms/filter.js delete mode 100644 public/scripts/views/forms/headers.js delete mode 100644 public/scripts/views/forms/ip-address.js delete mode 100644 public/scripts/views/forms/key-value.js delete mode 100644 public/scripts/views/forms/move-down.js delete mode 100644 public/scripts/views/forms/move-up.js delete mode 100644 public/scripts/views/forms/nav.js delete mode 100644 public/scripts/views/forms/oauth-custom.js delete mode 100644 public/scripts/views/forms/password-meter.js delete mode 100644 public/scripts/views/forms/pell.js delete mode 100644 public/scripts/views/forms/remove.js delete mode 100644 public/scripts/views/forms/required.js delete mode 100644 public/scripts/views/forms/run.js delete mode 100644 public/scripts/views/forms/select-all.js delete mode 100644 public/scripts/views/forms/selected.js delete mode 100644 public/scripts/views/forms/show-secret.js delete mode 100644 public/scripts/views/forms/switch.js delete mode 100644 public/scripts/views/forms/tags.js delete mode 100644 public/scripts/views/forms/text-count.js delete mode 100644 public/scripts/views/forms/text-direction.js delete mode 100644 public/scripts/views/forms/text-resize.js delete mode 100644 public/scripts/views/forms/upload.js delete mode 100644 public/scripts/views/general/cookies.js delete mode 100644 public/scripts/views/general/copy.js delete mode 100644 public/scripts/views/general/page-title.js delete mode 100644 public/scripts/views/general/scroll-direction.js delete mode 100644 public/scripts/views/general/scroll-to.js delete mode 100644 public/scripts/views/general/setup.js delete mode 100644 public/scripts/views/general/switch.js delete mode 100644 public/scripts/views/general/theme.js delete mode 100644 public/scripts/views/general/version.js delete mode 100644 public/scripts/views/paging/back.js delete mode 100644 public/scripts/views/paging/next.js delete mode 100644 public/scripts/views/service.js delete mode 100644 public/scripts/views/ui/highlight.js delete mode 100644 public/scripts/views/ui/loader.js delete mode 100644 public/scripts/views/ui/modal.js delete mode 100644 public/scripts/views/ui/open.js delete mode 100644 public/scripts/views/ui/phases.js delete mode 100644 public/scripts/views/ui/trigger.js delete mode 100644 public/styles/comps/alerts.less delete mode 100644 public/styles/comps/article.less delete mode 100644 public/styles/comps/avatar.less delete mode 100644 public/styles/comps/box.less delete mode 100644 public/styles/comps/cover.less delete mode 100644 public/styles/comps/database.less delete mode 100644 public/styles/comps/events.less delete mode 100644 public/styles/comps/footer.less delete mode 100644 public/styles/comps/header.less delete mode 100644 public/styles/comps/loader.less delete mode 100644 public/styles/comps/modal.less delete mode 100644 public/styles/comps/permissions-matrix.less delete mode 100644 public/styles/comps/pill.less delete mode 100644 public/styles/comps/preview-box.less delete mode 100644 public/styles/comps/scroll.less delete mode 100644 public/styles/comps/tabs.less delete mode 100644 public/styles/comps/upload-box.less delete mode 100644 public/styles/default-ltr.less delete mode 100644 public/styles/default-rtl.less delete mode 100644 public/styles/default.less delete mode 100644 public/styles/fonts.less delete mode 100644 public/styles/forms.less delete mode 100644 public/styles/functions.less delete mode 100644 public/styles/grid.less delete mode 100644 public/styles/icons.less delete mode 100644 public/styles/ide.less delete mode 100644 public/styles/polyfills.less delete mode 100644 public/styles/responsive.less delete mode 100644 public/styles/scopes/console.less delete mode 100644 public/styles/scopes/home.less delete mode 100644 public/styles/tabels.less delete mode 100644 public/styles/themes.less delete mode 100644 public/styles/typography.less delete mode 100644 public/styles/utilities.less diff --git a/Dockerfile b/Dockerfile index 84a469ba8..f88168ba6 100755 --- a/Dockerfile +++ b/Dockerfile @@ -308,8 +308,6 @@ COPY --from=zstd /usr/local/lib/php/extensions/no-debug-non-zts-20200930/zstd.so COPY ./app /usr/src/code/app COPY ./bin /usr/local/bin COPY ./docs /usr/src/code/docs -COPY ./public/fonts /usr/src/code/public/fonts -COPY ./public/images /usr/src/code/public/images COPY ./src /usr/src/code/src # Set Volumes diff --git a/app/db/DBIP/dbip-country-lite-2022-06.mmdb b/app/assets/dbip/dbip-country-lite-2022-06.mmdb similarity index 100% rename from app/db/DBIP/dbip-country-lite-2022-06.mmdb rename to app/assets/dbip/dbip-country-lite-2022-06.mmdb diff --git a/public/fonts/poppins-v9-latin-500.ttf b/app/assets/fonts/poppins-v9-latin-500.ttf similarity index 100% rename from public/fonts/poppins-v9-latin-500.ttf rename to app/assets/fonts/poppins-v9-latin-500.ttf diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index 7749cfbec..b4a777db2 100644 --- a/app/config/specs/open-api3-latest-client.json +++ b/app/config/specs/open-api3-latest-client.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index 9e92e3e3d..241b3c174 100644 --- a/app/config/specs/open-api3-latest-console.json +++ b/app/config/specs/open-api3-latest-console.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabases"}}}}},"x-appwrite":{"method":"getUsage","weight":113,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listDocumentLogs","weight":110,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listCollectionLogs","weight":88,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageCollection"}}}}},"x-appwrite":{"method":"getCollectionUsage","weight":115,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":82,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabase"}}}}},"x-appwrite":{"method":"getDatabaseUsage","weight":114,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getUsage","weight":225,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getFunctionUsage","weight":224,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/projectList"}}}}},"x-appwrite":{"method":"list","weight":136,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","tags":["projects"],"description":"","responses":{"201":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"create","weight":135,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}}}}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"get","weight":137,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"update","weight":139,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Project","operationId":"projectsDelete","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":144,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthLimit","weight":142,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","x-example":0}},"required":["limit"]}}}}}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthStatus","weight":143,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"schema":{"type":"string","x-example":"email-password"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","x-example":false}},"required":["status"]}}}}}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domainList"}}}}},"x-appwrite":{"method":"listDomains","weight":162,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","tags":["projects"],"description":"","responses":{"201":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"createDomain","weight":161,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","x-example":null}},"required":["domain"]}}}}}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"getDomain","weight":163,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":165,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"updateDomainVerification","weight":164,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/keyList"}}}}},"x-appwrite":{"method":"listKeys","weight":152,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","tags":["projects"],"description":"","responses":{"201":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"createKey","weight":151,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"getKey","weight":153,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"updateKey","weight":154,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":155,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateOAuth2","weight":141,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","x-example":false}},"required":["provider"]}}}}}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platformList"}}}}},"x-appwrite":{"method":"listPlatforms","weight":157,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","tags":["projects"],"description":"","responses":{"201":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"createPlatform","weight":156,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","x-example":null}},"required":["type","name"]}}}}}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"getPlatform","weight":158,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"updatePlatform","weight":159,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","x-example":null}},"required":["name"]}}}}},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":160,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateServiceStatus","weight":140,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","x-example":"account"},"status":{"type":"boolean","description":"Service status.","x-example":false}},"required":["service","status"]}}}}}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageProject"}}}}},"x-appwrite":{"method":"getUsage","weight":138,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhookList"}}}}},"x-appwrite":{"method":"listWebhooks","weight":146,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"createWebhook","weight":145,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"getWebhook","weight":147,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhook","weight":148,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":150,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhookSignature","weight":149,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageStorage"}}}}},"x-appwrite":{"method":"getUsage","weight":179,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageBuckets"}}}}},"x-appwrite":{"method":"getBucketUsage","weight":180,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":192,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageUsers"}}}}},"x-appwrite":{"method":"getUsage","weight":219,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"provider","description":"Provider Name.","required":false,"schema":{"type":"string","x-example":"email","default":""},"in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"$ref":"#\/components\/schemas\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"$ref":"#\/components\/schemas\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collections":{"type":"array","description":"Aggregated stats for number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","collections","users","storage"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabases"}}}}},"x-appwrite":{"method":"getUsage","weight":80,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listDocumentLogs","weight":77,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listCollectionLogs","weight":55,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageCollection"}}}}},"x-appwrite":{"method":"getCollectionUsage","weight":82,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":49,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabase"}}}}},"x-appwrite":{"method":"getDatabaseUsage","weight":81,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getUsage","weight":192,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getFunctionUsage","weight":191,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/projectList"}}}}},"x-appwrite":{"method":"list","weight":103,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","tags":["projects"],"description":"","responses":{"201":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"create","weight":102,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}}}}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"get","weight":104,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"update","weight":106,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Project","operationId":"projectsDelete","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":111,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthLimit","weight":109,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","x-example":0}},"required":["limit"]}}}}}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthStatus","weight":110,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"schema":{"type":"string","x-example":"email-password"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","x-example":false}},"required":["status"]}}}}}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domainList"}}}}},"x-appwrite":{"method":"listDomains","weight":129,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","tags":["projects"],"description":"","responses":{"201":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"createDomain","weight":128,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","x-example":null}},"required":["domain"]}}}}}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"getDomain","weight":130,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":132,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"updateDomainVerification","weight":131,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/keyList"}}}}},"x-appwrite":{"method":"listKeys","weight":119,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","tags":["projects"],"description":"","responses":{"201":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"createKey","weight":118,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"getKey","weight":120,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"updateKey","weight":121,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":122,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateOAuth2","weight":108,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","x-example":false}},"required":["provider"]}}}}}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platformList"}}}}},"x-appwrite":{"method":"listPlatforms","weight":124,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","tags":["projects"],"description":"","responses":{"201":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"createPlatform","weight":123,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","x-example":null}},"required":["type","name"]}}}}}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"getPlatform","weight":125,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"updatePlatform","weight":126,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","x-example":null}},"required":["name"]}}}}},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":127,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateServiceStatus","weight":107,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","x-example":"account"},"status":{"type":"boolean","description":"Service status.","x-example":false}},"required":["service","status"]}}}}}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageProject"}}}}},"x-appwrite":{"method":"getUsage","weight":105,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhookList"}}}}},"x-appwrite":{"method":"listWebhooks","weight":113,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"createWebhook","weight":112,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"getWebhook","weight":114,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhook","weight":115,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":117,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhookSignature","weight":116,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageStorage"}}}}},"x-appwrite":{"method":"getUsage","weight":146,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageBuckets"}}}}},"x-appwrite":{"method":"getBucketUsage","weight":147,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":159,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageUsers"}}}}},"x-appwrite":{"method":"getUsage","weight":186,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"provider","description":"Provider Name.","required":false,"schema":{"type":"string","x-example":"email","default":""},"in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"$ref":"#\/components\/schemas\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"$ref":"#\/components\/schemas\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databases":{"type":"array","description":"Aggregated stats for number of databases.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buckets":{"type":"array","description":"Aggregated stats for number of buckets.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","databases","users","storage","buckets"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index df90490ba..29b624088 100644 --- a/app/config/specs/open-api3-latest-server.json +++ b/app/config/specs/open-api3-latest-server.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File 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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index 860a47329..b008eaf40 100644 --- a/app/config/specs/swagger2-latest-client.json +++ b/app/config/specs/swagger2-latest-client.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index 50f134733..8f89ae876 100644 --- a/app/config/specs/swagger2-latest-console.json +++ b/app/config/specs/swagger2-latest-console.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":40,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":51,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":50,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":41,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":46,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":47,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":42,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":48,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":49,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","schema":{"$ref":"#\/definitions\/usageDatabases"}}},"x-appwrite":{"method":"getUsage","weight":113,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listDocumentLogs","weight":110,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listCollectionLogs","weight":88,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","schema":{"$ref":"#\/definitions\/usageCollection"}}},"x-appwrite":{"method":"getCollectionUsage","weight":115,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":82,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","schema":{"$ref":"#\/definitions\/usageDatabase"}}},"x-appwrite":{"method":"getDatabaseUsage","weight":114,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getUsage","weight":225,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getFunctionUsage","weight":224,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","schema":{"$ref":"#\/definitions\/projectList"}}},"x-appwrite":{"method":"list","weight":136,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"create","weight":135,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","default":null,"x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","default":null,"x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}]}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"get","weight":137,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"update","weight":139,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}]},"delete":{"summary":"Delete Project","operationId":"projectsDelete","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":144,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthLimit","weight":142,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","default":null,"x-example":0}},"required":["limit"]}}]}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthStatus","weight":143,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"type":"string","x-example":"email-password","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","default":null,"x-example":false}},"required":["status"]}}]}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","schema":{"$ref":"#\/definitions\/domainList"}}},"x-appwrite":{"method":"listDomains","weight":162,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"createDomain","weight":161,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","default":null,"x-example":null}},"required":["domain"]}}]}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"getDomain","weight":163,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":165,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"updateDomainVerification","weight":164,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","schema":{"$ref":"#\/definitions\/keyList"}}},"x-appwrite":{"method":"listKeys","weight":152,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"createKey","weight":151,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"getKey","weight":153,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"updateKey","weight":154,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":155,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateOAuth2","weight":141,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","default":null,"x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","default":null,"x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","default":null,"x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","default":null,"x-example":false}},"required":["provider"]}}]}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","schema":{"$ref":"#\/definitions\/platformList"}}},"x-appwrite":{"method":"listPlatforms","weight":157,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"createPlatform","weight":156,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","default":null,"x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","default":"","x-example":null}},"required":["type","name"]}}]}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"getPlatform","weight":158,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"updatePlatform","weight":159,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","default":"","x-example":null}},"required":["name"]}}]},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":160,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateServiceStatus","weight":140,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","default":null,"x-example":"account"},"status":{"type":"boolean","description":"Service status.","default":null,"x-example":false}},"required":["service","status"]}}]}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","schema":{"$ref":"#\/definitions\/usageProject"}}},"x-appwrite":{"method":"getUsage","weight":138,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","schema":{"$ref":"#\/definitions\/webhookList"}}},"x-appwrite":{"method":"listWebhooks","weight":146,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"createWebhook","weight":145,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"getWebhook","weight":147,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhook","weight":148,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":150,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhookSignature","weight":149,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","schema":{"$ref":"#\/definitions\/usageStorage"}}},"x-appwrite":{"method":"getUsage","weight":179,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","schema":{"$ref":"#\/definitions\/usageBuckets"}}},"x-appwrite":{"method":"getBucketUsage","weight":180,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":192,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","schema":{"$ref":"#\/definitions\/usageUsers"}}},"x-appwrite":{"method":"getUsage","weight":219,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"provider","description":"Provider Name.","required":false,"type":"string","x-example":"email","default":"","in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"type":"object","$ref":"#\/definitions\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"type":"object","$ref":"#\/definitions\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collections":{"type":"array","description":"Aggregated stats for number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","collections","users","storage"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create Account JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Account Session with Email","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create Account Session with OAuth2","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","schema":{"$ref":"#\/definitions\/usageDatabases"}}},"x-appwrite":{"method":"getUsage","weight":80,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listDocumentLogs","weight":77,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listCollectionLogs","weight":55,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","schema":{"$ref":"#\/definitions\/usageCollection"}}},"x-appwrite":{"method":"getCollectionUsage","weight":82,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":49,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","schema":{"$ref":"#\/definitions\/usageDatabase"}}},"x-appwrite":{"method":"getDatabaseUsage","weight":81,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getUsage","weight":192,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getFunctionUsage","weight":191,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","schema":{"$ref":"#\/definitions\/projectList"}}},"x-appwrite":{"method":"list","weight":103,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"create","weight":102,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","default":null,"x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","default":null,"x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}]}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"get","weight":104,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"update","weight":106,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}]},"delete":{"summary":"Delete Project","operationId":"projectsDelete","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":111,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthLimit","weight":109,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","default":null,"x-example":0}},"required":["limit"]}}]}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthStatus","weight":110,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"type":"string","x-example":"email-password","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","default":null,"x-example":false}},"required":["status"]}}]}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","schema":{"$ref":"#\/definitions\/domainList"}}},"x-appwrite":{"method":"listDomains","weight":129,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"createDomain","weight":128,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","default":null,"x-example":null}},"required":["domain"]}}]}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"getDomain","weight":130,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":132,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"updateDomainVerification","weight":131,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","schema":{"$ref":"#\/definitions\/keyList"}}},"x-appwrite":{"method":"listKeys","weight":119,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"createKey","weight":118,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"getKey","weight":120,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"updateKey","weight":121,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":122,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateOAuth2","weight":108,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","default":null,"x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","default":null,"x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","default":null,"x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","default":null,"x-example":false}},"required":["provider"]}}]}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","schema":{"$ref":"#\/definitions\/platformList"}}},"x-appwrite":{"method":"listPlatforms","weight":124,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"createPlatform","weight":123,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","default":null,"x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","default":"","x-example":null}},"required":["type","name"]}}]}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"getPlatform","weight":125,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"updatePlatform","weight":126,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","default":"","x-example":null}},"required":["name"]}}]},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":127,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateServiceStatus","weight":107,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","default":null,"x-example":"account"},"status":{"type":"boolean","description":"Service status.","default":null,"x-example":false}},"required":["service","status"]}}]}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","schema":{"$ref":"#\/definitions\/usageProject"}}},"x-appwrite":{"method":"getUsage","weight":105,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","schema":{"$ref":"#\/definitions\/webhookList"}}},"x-appwrite":{"method":"listWebhooks","weight":113,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"createWebhook","weight":112,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"getWebhook","weight":114,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhook","weight":115,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":117,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhookSignature","weight":116,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","schema":{"$ref":"#\/definitions\/usageStorage"}}},"x-appwrite":{"method":"getUsage","weight":146,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","schema":{"$ref":"#\/definitions\/usageBuckets"}}},"x-appwrite":{"method":"getBucketUsage","weight":147,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":159,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","schema":{"$ref":"#\/definitions\/usageUsers"}}},"x-appwrite":{"method":"getUsage","weight":186,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"provider","description":"Provider Name.","required":false,"type":"string","x-example":"email","default":"","in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"type":"object","$ref":"#\/definitions\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"type":"object","$ref":"#\/definitions\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databases":{"type":"array","description":"Aggregated stats for number of databases.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buckets":{"type":"array","description":"Aggregated stats for number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","databases","users","storage","buckets"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index 1f4c4255f..1bc94ee2f 100644 --- a/app/config/specs/swagger2-latest-server.json +++ b/app/config/specs/swagger2-latest-server.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":52,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":59,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":55,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":57,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":58,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":60,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":53,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":61,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":66,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":67,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":54,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":65,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":56,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":64,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":63,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":62,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":68,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":69,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":70,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":71,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":73,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":72,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":76,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":74,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":75,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":78,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":77,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":80,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":79,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":81,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":83,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":84,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":86,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":85,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":87,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":89,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":90,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":100,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":98,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":99,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":92,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":93,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":97,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":96,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":94,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":91,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":95,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":101,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":102,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":104,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":103,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":105,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":106,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":221,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":220,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":222,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":223,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":226,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":228,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":230,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":229,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":231,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":227,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":232,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":233,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":235,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":234,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":236,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":238,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":237,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":239,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":240,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":241,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":123,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":133,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":126,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":125,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":130,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":131,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":129,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":128,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":132,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":127,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":120,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":117,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":118,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":119,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":121,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":122,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":167,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":166,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":168,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":169,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":170,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":172,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":171,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":173,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":177,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":178,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":175,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":174,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":176,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":182,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":181,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":183,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":184,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":187,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":186,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":188,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":189,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":191,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":190,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":201,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":193,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":196,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":194,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":195,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":198,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":199,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":200,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":197,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":202,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":218,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":212,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":206,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":205,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":210,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":211,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":213,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":203,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":215,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":204,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":217,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":216,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":207,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":214,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":209,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.0.3","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Account Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/logs":{"get":{"summary":"List Account Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Account Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Account Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Account Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Account Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Account Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete All Account Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session By ID","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Account Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Account Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document 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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function 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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique 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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File 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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team 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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User 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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/console b/app/console index c3a0b1e77..d5261290f 160000 --- a/app/console +++ b/app/console @@ -1 +1 @@ -Subproject commit c3a0b1e77ef65298f829284c99b60daa473e97d9 +Subproject commit d5261290f378b3f987aa15b53f4b4e8f63b32b0a diff --git a/app/controllers/api/avatars.php b/app/controllers/api/avatars.php index b7aef1505..8047adfdd 100644 --- a/app/controllers/api/avatars.php +++ b/app/controllers/api/avatars.php @@ -399,8 +399,8 @@ App::get('/v1/avatars/initials') $punch->newImage($width, $height, 'transparent'); - $draw->setFont(__DIR__ . "/../../../public/fonts/poppins-v9-latin-500.ttf"); - $image->setFont(__DIR__ . "/../../../public/fonts/poppins-v9-latin-500.ttf"); + $draw->setFont(__DIR__ . "/../../assets/fonts/poppins-v9-latin-500.ttf"); + $image->setFont(__DIR__ . "/../../assets/fonts/poppins-v9-latin-500.ttf"); $draw->setFillColor(new ImagickPixel('black')); $draw->setFontSize($fontSize); diff --git a/app/init.php b/app/init.php index 737aa359b..ca0c65aa9 100644 --- a/app/init.php +++ b/app/init.php @@ -600,7 +600,7 @@ $register->set('smtp', function () { return $mail; }); $register->set('geodb', function () { - return new Reader(__DIR__ . '/db/DBIP/dbip-country-lite-2022-06.mmdb'); + return new Reader(__DIR__ . '/assets/dbip/dbip-country-lite-2022-06.mmdb'); }); $register->set('db', function () { // This is usually for our workers or CLI commands scope diff --git a/public/dist/scripts/app-all.js b/public/dist/scripts/app-all.js deleted file mode 100644 index 54b82c4c6..000000000 --- a/public/dist/scripts/app-all.js +++ /dev/null @@ -1,4193 +0,0 @@ - -(function(exports,isomorphicFormData,crossFetch){'use strict';function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});} -return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}} -function rejected(value){try{step(generator["throw"](value));}catch(e){reject(e);}} -function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);} -step((generator=generator.apply(thisArg,_arguments||[])).next());});} -class Service{constructor(client){this.client=client;} -static flatten(data,prefix=''){let output={};for(const key in data){let value=data[key];let finalKey=prefix?`${prefix}[${key}]`:key;if(Array.isArray(value)){output=Object.assign(output,this.flatten(value,finalKey));} -else{output[finalKey]=value;}} -return output;}} -Service.CHUNK_SIZE=5*1024*1024;class Query{} -Query.equal=(attribute,value)=>Query.addQuery(attribute,"equal",value);Query.notEqual=(attribute,value)=>Query.addQuery(attribute,"notEqual",value);Query.lessThan=(attribute,value)=>Query.addQuery(attribute,"lessThan",value);Query.lessThanEqual=(attribute,value)=>Query.addQuery(attribute,"lessThanEqual",value);Query.greaterThan=(attribute,value)=>Query.addQuery(attribute,"greaterThan",value);Query.greaterThanEqual=(attribute,value)=>Query.addQuery(attribute,"greaterThanEqual",value);Query.search=(attribute,value)=>Query.addQuery(attribute,"search",value);Query.orderDesc=(attribute)=>`orderDesc("${attribute}")`;Query.orderAsc=(attribute)=>`orderAsc("${attribute}")`;Query.cursorAfter=(documentId)=>`cursorAfter("${documentId}")`;Query.cursorBefore=(documentId)=>`cursorBefore("${documentId}")`;Query.limit=(limit)=>`limit(${limit})`;Query.offset=(offset)=>`offset(${offset})`;Query.addQuery=(attribute,method,value)=>value instanceof Array?`${method}("${attribute}", [${value - .map((v) => Query.parseValues(v)) - .join(",")}])`:`${method}("${attribute}", [${Query.parseValues(value)}])`;Query.parseValues=(value)=>typeof value==="string"||value instanceof String?`"${value}"`:`${value}`;class AppwriteException extends Error{constructor(message,code=0,type='',response=''){super(message);this.name='AppwriteException';this.message=message;this.code=code;this.type=type;this.response=response;}} -class Client{constructor(){this.config={endpoint:'https://HOSTNAME/v1',endpointRealtime:'',project:'',key:'',jwt:'',locale:'',mode:'',};this.headers={'x-sdk-name':'Console','x-sdk-platform':'console','x-sdk-language':'web','x-sdk-version':'7.0.0','X-Appwrite-Response-Format':'1.0.0',};this.realtime={socket:undefined,timeout:undefined,url:'',channels:new Set(),subscriptions:new Map(),subscriptionsCounter:0,reconnect:true,reconnectAttempts:0,lastMessage:undefined,connect:()=>{clearTimeout(this.realtime.timeout);this.realtime.timeout=window===null||window===void 0?void 0:window.setTimeout(()=>{this.realtime.createSocket();},50);},getTimeout:()=>{switch(true){case this.realtime.reconnectAttempts<5:return 1000;case this.realtime.reconnectAttempts<15:return 5000;case this.realtime.reconnectAttempts<100:return 10000;default:return 60000;}},createSocket:()=>{var _a,_b;if(this.realtime.channels.size<1) -return;const channels=new URLSearchParams();channels.set('project',this.config.project);this.realtime.channels.forEach(channel=>{channels.append('channels[]',channel);});const url=this.config.endpointRealtime+'/realtime?'+channels.toString();if(url!==this.realtime.url||!this.realtime.socket||((_a=this.realtime.socket)===null||_a===void 0?void 0:_a.readyState)>WebSocket.OPEN){if(this.realtime.socket&&((_b=this.realtime.socket)===null||_b===void 0?void 0:_b.readyState){this.realtime.reconnectAttempts=0;});this.realtime.socket.addEventListener('close',event=>{var _a,_b,_c;if(!this.realtime.reconnect||(((_b=(_a=this.realtime)===null||_a===void 0?void 0:_a.lastMessage)===null||_b===void 0?void 0:_b.type)==='error'&&((_c=this.realtime)===null||_c===void 0?void 0:_c.lastMessage.data).code===1008)){this.realtime.reconnect=true;return;} -const timeout=this.realtime.getTimeout();console.error(`Realtime got disconnected. Reconnect will be attempted in ${timeout / 1000} seconds.`,event.reason);setTimeout(()=>{this.realtime.reconnectAttempts++;this.realtime.createSocket();},timeout);});}},onMessage:(event)=>{var _a,_b;try{const message=JSON.parse(event.data);this.realtime.lastMessage=message;switch(message.type){case'connected':const cookie=JSON.parse((_a=window.localStorage.getItem('cookieFallback'))!==null&&_a!==void 0?_a:'{}');const session=cookie===null||cookie===void 0?void 0:cookie[`a_session_${this.config.project}`];const messageData=message.data;if(session&&!messageData.user){(_b=this.realtime.socket)===null||_b===void 0?void 0:_b.send(JSON.stringify({type:'authentication',data:{session}}));} -break;case'event':let data=message.data;if(data===null||data===void 0?void 0:data.channels){const isSubscribed=data.channels.some(channel=>this.realtime.channels.has(channel));if(!isSubscribed) -return;this.realtime.subscriptions.forEach(subscription=>{if(data.channels.some(channel=>subscription.channels.includes(channel))){setTimeout(()=>subscription.callback(data));}});} -break;case'error':throw message.data;default:break;}} -catch(e){console.error(e);}},cleanUp:channels=>{this.realtime.channels.forEach(channel=>{if(channels.includes(channel)){let found=Array.from(this.realtime.subscriptions).some(([_key,subscription])=>{return subscription.channels.includes(channel);});if(!found){this.realtime.channels.delete(channel);}}});}};} -setEndpoint(endpoint){this.config.endpoint=endpoint;this.config.endpointRealtime=this.config.endpointRealtime||this.config.endpoint.replace('https://','wss://').replace('http://','ws://');return this;} -setEndpointRealtime(endpointRealtime){this.config.endpointRealtime=endpointRealtime;return this;} -setProject(value){this.headers['X-Appwrite-Project']=value;this.config.project=value;return this;} -setKey(value){this.headers['X-Appwrite-Key']=value;this.config.key=value;return this;} -setJWT(value){this.headers['X-Appwrite-JWT']=value;this.config.jwt=value;return this;} -setLocale(value){this.headers['X-Appwrite-Locale']=value;this.config.locale=value;return this;} -setMode(value){this.headers['X-Appwrite-Mode']=value;this.config.mode=value;return this;} -subscribe(channels,callback){let channelArray=typeof channels==='string'?[channels]:channels;channelArray.forEach(channel=>this.realtime.channels.add(channel));const counter=this.realtime.subscriptionsCounter++;this.realtime.subscriptions.set(counter,{channels:channelArray,callback});this.realtime.connect();return()=>{this.realtime.subscriptions.delete(counter);this.realtime.cleanUp(channelArray);this.realtime.connect();};} -call(method,url,headers={},params={}){var _a,_b;return __awaiter(this,void 0,void 0,function*(){method=method.toUpperCase();headers=Object.assign({},this.headers,headers);let options={method,headers,credentials:'include'};if(typeof window!=='undefined'&&window.localStorage){headers['X-Fallback-Cookies']=(_a=window.localStorage.getItem('cookieFallback'))!==null&&_a!==void 0?_a:'';} -if(method==='GET'){for(const[key,value]of Object.entries(Service.flatten(params))){url.searchParams.append(key,value);}} -else{switch(headers['content-type']){case'application/json':options.body=JSON.stringify(params);break;case'multipart/form-data':let formData=new FormData();for(const key in params){if(Array.isArray(params[key])){params[key].forEach((value)=>{formData.append(key+'[]',value);});} -else{formData.append(key,params[key]);}} -options.body=formData;delete headers['content-type'];break;}} -try{let data=null;const response=yield crossFetch.fetch(url.toString(),options);if((_b=response.headers.get('content-type'))===null||_b===void 0?void 0:_b.includes('application/json')){data=yield response.json();} -else{data={message:yield response.text()};} -if(400<=response.status){throw new AppwriteException(data===null||data===void 0?void 0:data.message,response.status,data===null||data===void 0?void 0:data.type,data);} -const cookieFallback=response.headers.get('X-Fallback-Cookies');if(typeof window!=='undefined'&&window.localStorage&&cookieFallback){window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.');window.localStorage.setItem('cookieFallback',cookieFallback);} -return data;} -catch(e){if(e instanceof AppwriteException){throw e;} -throw new AppwriteException(e.message);}});}} -class Account extends Service{constructor(client){super(client);} -get(){return __awaiter(this,void 0,void 0,function*(){let path='/account';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -create(userId,email,password,name){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof email==='undefined'){throw new AppwriteException('Missing required parameter: "email"');} -if(typeof password==='undefined'){throw new AppwriteException('Missing required parameter: "password"');} -let path='/account';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof email!=='undefined'){payload['email']=email;} -if(typeof password!=='undefined'){payload['password']=password;} -if(typeof name!=='undefined'){payload['name']=name;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -updateEmail(email,password){return __awaiter(this,void 0,void 0,function*(){if(typeof email==='undefined'){throw new AppwriteException('Missing required parameter: "email"');} -if(typeof password==='undefined'){throw new AppwriteException('Missing required parameter: "password"');} -let path='/account/email';let payload={};if(typeof email!=='undefined'){payload['email']=email;} -if(typeof password!=='undefined'){payload['password']=password;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -createJWT(){return __awaiter(this,void 0,void 0,function*(){let path='/account/jwt';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -listLogs(queries){return __awaiter(this,void 0,void 0,function*(){let path='/account/logs';let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -updateName(name){return __awaiter(this,void 0,void 0,function*(){if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');} -let path='/account/name';let payload={};if(typeof name!=='undefined'){payload['name']=name;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -updatePassword(password,oldPassword){return __awaiter(this,void 0,void 0,function*(){if(typeof password==='undefined'){throw new AppwriteException('Missing required parameter: "password"');} -let path='/account/password';let payload={};if(typeof password!=='undefined'){payload['password']=password;} -if(typeof oldPassword!=='undefined'){payload['oldPassword']=oldPassword;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -updatePhone(phone,password){return __awaiter(this,void 0,void 0,function*(){if(typeof phone==='undefined'){throw new AppwriteException('Missing required parameter: "phone"');} -if(typeof password==='undefined'){throw new AppwriteException('Missing required parameter: "password"');} -let path='/account/phone';let payload={};if(typeof phone!=='undefined'){payload['phone']=phone;} -if(typeof password!=='undefined'){payload['password']=password;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -getPrefs(){return __awaiter(this,void 0,void 0,function*(){let path='/account/prefs';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -updatePrefs(prefs){return __awaiter(this,void 0,void 0,function*(){if(typeof prefs==='undefined'){throw new AppwriteException('Missing required parameter: "prefs"');} -let path='/account/prefs';let payload={};if(typeof prefs!=='undefined'){payload['prefs']=prefs;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -createRecovery(email,url){return __awaiter(this,void 0,void 0,function*(){if(typeof email==='undefined'){throw new AppwriteException('Missing required parameter: "email"');} -if(typeof url==='undefined'){throw new AppwriteException('Missing required parameter: "url"');} -let path='/account/recovery';let payload={};if(typeof email!=='undefined'){payload['email']=email;} -if(typeof url!=='undefined'){payload['url']=url;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -updateRecovery(userId,secret,password,passwordAgain){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof secret==='undefined'){throw new AppwriteException('Missing required parameter: "secret"');} -if(typeof password==='undefined'){throw new AppwriteException('Missing required parameter: "password"');} -if(typeof passwordAgain==='undefined'){throw new AppwriteException('Missing required parameter: "passwordAgain"');} -let path='/account/recovery';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof secret!=='undefined'){payload['secret']=secret;} -if(typeof password!=='undefined'){payload['password']=password;} -if(typeof passwordAgain!=='undefined'){payload['passwordAgain']=passwordAgain;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});} -listSessions(){return __awaiter(this,void 0,void 0,function*(){let path='/account/sessions';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -deleteSessions(){return __awaiter(this,void 0,void 0,function*(){let path='/account/sessions';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -createAnonymousSession(){return __awaiter(this,void 0,void 0,function*(){let path='/account/sessions/anonymous';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createEmailSession(email,password){return __awaiter(this,void 0,void 0,function*(){if(typeof email==='undefined'){throw new AppwriteException('Missing required parameter: "email"');} -if(typeof password==='undefined'){throw new AppwriteException('Missing required parameter: "password"');} -let path='/account/sessions/email';let payload={};if(typeof email!=='undefined'){payload['email']=email;} -if(typeof password!=='undefined'){payload['password']=password;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createMagicURLSession(userId,email,url){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof email==='undefined'){throw new AppwriteException('Missing required parameter: "email"');} -let path='/account/sessions/magic-url';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof email!=='undefined'){payload['email']=email;} -if(typeof url!=='undefined'){payload['url']=url;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -updateMagicURLSession(userId,secret){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof secret==='undefined'){throw new AppwriteException('Missing required parameter: "secret"');} -let path='/account/sessions/magic-url';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof secret!=='undefined'){payload['secret']=secret;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});} -createOAuth2Session(provider,success,failure,scopes){if(typeof provider==='undefined'){throw new AppwriteException('Missing required parameter: "provider"');} -let path='/account/sessions/oauth2/{provider}'.replace('{provider}',provider);let payload={};if(typeof success!=='undefined'){payload['success']=success;} -if(typeof failure!=='undefined'){payload['failure']=failure;} -if(typeof scopes!=='undefined'){payload['scopes']=scopes;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -if(typeof window!=='undefined'&&(window===null||window===void 0?void 0:window.location)){window.location.href=uri.toString();} -else{return uri;}} -createPhoneSession(userId,phone){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof phone==='undefined'){throw new AppwriteException('Missing required parameter: "phone"');} -let path='/account/sessions/phone';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof phone!=='undefined'){payload['phone']=phone;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -updatePhoneSession(userId,secret){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof secret==='undefined'){throw new AppwriteException('Missing required parameter: "secret"');} -let path='/account/sessions/phone';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof secret!=='undefined'){payload['secret']=secret;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});} -getSession(sessionId){return __awaiter(this,void 0,void 0,function*(){if(typeof sessionId==='undefined'){throw new AppwriteException('Missing required parameter: "sessionId"');} -let path='/account/sessions/{sessionId}'.replace('{sessionId}',sessionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -updateSession(sessionId){return __awaiter(this,void 0,void 0,function*(){if(typeof sessionId==='undefined'){throw new AppwriteException('Missing required parameter: "sessionId"');} -let path='/account/sessions/{sessionId}'.replace('{sessionId}',sessionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -deleteSession(sessionId){return __awaiter(this,void 0,void 0,function*(){if(typeof sessionId==='undefined'){throw new AppwriteException('Missing required parameter: "sessionId"');} -let path='/account/sessions/{sessionId}'.replace('{sessionId}',sessionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -updateStatus(){return __awaiter(this,void 0,void 0,function*(){let path='/account/status';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -createVerification(url){return __awaiter(this,void 0,void 0,function*(){if(typeof url==='undefined'){throw new AppwriteException('Missing required parameter: "url"');} -let path='/account/verification';let payload={};if(typeof url!=='undefined'){payload['url']=url;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -updateVerification(userId,secret){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof secret==='undefined'){throw new AppwriteException('Missing required parameter: "secret"');} -let path='/account/verification';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof secret!=='undefined'){payload['secret']=secret;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});} -createPhoneVerification(){return __awaiter(this,void 0,void 0,function*(){let path='/account/verification/phone';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -updatePhoneVerification(userId,secret){return __awaiter(this,void 0,void 0,function*(){if(typeof userId==='undefined'){throw new AppwriteException('Missing required parameter: "userId"');} -if(typeof secret==='undefined'){throw new AppwriteException('Missing required parameter: "secret"');} -let path='/account/verification/phone';let payload={};if(typeof userId!=='undefined'){payload['userId']=userId;} -if(typeof secret!=='undefined'){payload['secret']=secret;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});}} -class Avatars extends Service{constructor(client){super(client);} -getBrowser(code,width,height,quality){if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');} -let path='/avatars/browsers/{code}'.replace('{code}',code);let payload={};if(typeof width!=='undefined'){payload['width']=width;} -if(typeof height!=='undefined'){payload['height']=height;} -if(typeof quality!=='undefined'){payload['quality']=quality;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -return uri;} -getCreditCard(code,width,height,quality){if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');} -let path='/avatars/credit-cards/{code}'.replace('{code}',code);let payload={};if(typeof width!=='undefined'){payload['width']=width;} -if(typeof height!=='undefined'){payload['height']=height;} -if(typeof quality!=='undefined'){payload['quality']=quality;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -return uri;} -getFavicon(url){if(typeof url==='undefined'){throw new AppwriteException('Missing required parameter: "url"');} -let path='/avatars/favicon';let payload={};if(typeof url!=='undefined'){payload['url']=url;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -return uri;} -getFlag(code,width,height,quality){if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');} -let path='/avatars/flags/{code}'.replace('{code}',code);let payload={};if(typeof width!=='undefined'){payload['width']=width;} -if(typeof height!=='undefined'){payload['height']=height;} -if(typeof quality!=='undefined'){payload['quality']=quality;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -return uri;} -getImage(url,width,height){if(typeof url==='undefined'){throw new AppwriteException('Missing required parameter: "url"');} -let path='/avatars/image';let payload={};if(typeof url!=='undefined'){payload['url']=url;} -if(typeof width!=='undefined'){payload['width']=width;} -if(typeof height!=='undefined'){payload['height']=height;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -return uri;} -getInitials(name,width,height,background){let path='/avatars/initials';let payload={};if(typeof name!=='undefined'){payload['name']=name;} -if(typeof width!=='undefined'){payload['width']=width;} -if(typeof height!=='undefined'){payload['height']=height;} -if(typeof background!=='undefined'){payload['background']=background;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -return uri;} -getQR(text,size,margin,download){if(typeof text==='undefined'){throw new AppwriteException('Missing required parameter: "text"');} -let path='/avatars/qr';let payload={};if(typeof text!=='undefined'){payload['text']=text;} -if(typeof size!=='undefined'){payload['size']=size;} -if(typeof margin!=='undefined'){payload['margin']=margin;} -if(typeof download!=='undefined'){payload['download']=download;} -const uri=new URL(this.client.config.endpoint+path);payload['project']=this.client.config.project;for(const[key,value]of Object.entries(Service.flatten(payload))){uri.searchParams.append(key,value);} -return uri;}} -class Databases extends Service{constructor(client){super(client);} -list(queries,search){return __awaiter(this,void 0,void 0,function*(){let path='/databases';let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -if(typeof search!=='undefined'){payload['search']=search;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -create(databaseId,name){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');} -let path='/databases';let payload={};if(typeof databaseId!=='undefined'){payload['databaseId']=databaseId;} -if(typeof name!=='undefined'){payload['name']=name;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -getUsage(range){return __awaiter(this,void 0,void 0,function*(){let path='/databases/usage';let payload={};if(typeof range!=='undefined'){payload['range']=range;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -get(databaseId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -let path='/databases/{databaseId}'.replace('{databaseId}',databaseId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -update(databaseId,name){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');} -let path='/databases/{databaseId}'.replace('{databaseId}',databaseId);let payload={};if(typeof name!=='undefined'){payload['name']=name;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});} -delete(databaseId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -let path='/databases/{databaseId}'.replace('{databaseId}',databaseId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -listCollections(databaseId,queries,search){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -let path='/databases/{databaseId}/collections'.replace('{databaseId}',databaseId);let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -if(typeof search!=='undefined'){payload['search']=search;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -createCollection(databaseId,collectionId,name,permissions,documentSecurity){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');} -let path='/databases/{databaseId}/collections'.replace('{databaseId}',databaseId);let payload={};if(typeof collectionId!=='undefined'){payload['collectionId']=collectionId;} -if(typeof name!=='undefined'){payload['name']=name;} -if(typeof permissions!=='undefined'){payload['permissions']=permissions;} -if(typeof documentSecurity!=='undefined'){payload['documentSecurity']=documentSecurity;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -getCollection(databaseId,collectionId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -let path='/databases/{databaseId}/collections/{collectionId}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -updateCollection(databaseId,collectionId,name,permissions,documentSecurity,enabled){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');} -let path='/databases/{databaseId}/collections/{collectionId}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof name!=='undefined'){payload['name']=name;} -if(typeof permissions!=='undefined'){payload['permissions']=permissions;} -if(typeof documentSecurity!=='undefined'){payload['documentSecurity']=documentSecurity;} -if(typeof enabled!=='undefined'){payload['enabled']=enabled;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});} -deleteCollection(databaseId,collectionId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -let path='/databases/{databaseId}/collections/{collectionId}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -listAttributes(databaseId,collectionId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -createBooleanAttribute(databaseId,collectionId,key,required,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/boolean'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createDatetimeAttribute(databaseId,collectionId,key,required,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/datetime'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createEmailAttribute(databaseId,collectionId,key,required,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/email'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createEnumAttribute(databaseId,collectionId,key,elements,required,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof elements==='undefined'){throw new AppwriteException('Missing required parameter: "elements"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/enum'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof elements!=='undefined'){payload['elements']=elements;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createFloatAttribute(databaseId,collectionId,key,required,min,max,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/float'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof min!=='undefined'){payload['min']=min;} -if(typeof max!=='undefined'){payload['max']=max;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createIntegerAttribute(databaseId,collectionId,key,required,min,max,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/integer'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof min!=='undefined'){payload['min']=min;} -if(typeof max!=='undefined'){payload['max']=max;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createIpAttribute(databaseId,collectionId,key,required,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/ip'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createStringAttribute(databaseId,collectionId,key,size,required,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof size==='undefined'){throw new AppwriteException('Missing required parameter: "size"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/string'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof size!=='undefined'){payload['size']=size;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -createUrlAttribute(databaseId,collectionId,key,required,xdefault,array){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof required==='undefined'){throw new AppwriteException('Missing required parameter: "required"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/url'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof required!=='undefined'){payload['required']=required;} -if(typeof xdefault!=='undefined'){payload['default']=xdefault;} -if(typeof array!=='undefined'){payload['array']=array;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -getAttribute(databaseId,collectionId,key){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/{key}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{key}',key);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -deleteAttribute(databaseId,collectionId,key){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -let path='/databases/{databaseId}/collections/{collectionId}/attributes/{key}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{key}',key);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -listDocuments(databaseId,collectionId,queries){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -let path='/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -createDocument(databaseId,collectionId,documentId,data,permissions){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof documentId==='undefined'){throw new AppwriteException('Missing required parameter: "documentId"');} -if(typeof data==='undefined'){throw new AppwriteException('Missing required parameter: "data"');} -let path='/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof documentId!=='undefined'){payload['documentId']=documentId;} -if(typeof data!=='undefined'){payload['data']=data;} -if(typeof permissions!=='undefined'){payload['permissions']=permissions;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -getDocument(databaseId,collectionId,documentId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof documentId==='undefined'){throw new AppwriteException('Missing required parameter: "documentId"');} -let path='/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{documentId}',documentId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -updateDocument(databaseId,collectionId,documentId,data,permissions){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof documentId==='undefined'){throw new AppwriteException('Missing required parameter: "documentId"');} -let path='/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{documentId}',documentId);let payload={};if(typeof data!=='undefined'){payload['data']=data;} -if(typeof permissions!=='undefined'){payload['permissions']=permissions;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('patch',uri,{'content-type':'application/json',},payload);});} -deleteDocument(databaseId,collectionId,documentId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof documentId==='undefined'){throw new AppwriteException('Missing required parameter: "documentId"');} -let path='/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{documentId}',documentId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -listDocumentLogs(databaseId,collectionId,documentId,queries){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof documentId==='undefined'){throw new AppwriteException('Missing required parameter: "documentId"');} -let path='/databases/{databaseId}/collections/{collectionId}/documents/{documentId}/logs'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{documentId}',documentId);let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -listIndexes(databaseId,collectionId){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -let path='/databases/{databaseId}/collections/{collectionId}/indexes'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -createIndex(databaseId,collectionId,key,type,attributes,orders){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -if(typeof type==='undefined'){throw new AppwriteException('Missing required parameter: "type"');} -if(typeof attributes==='undefined'){throw new AppwriteException('Missing required parameter: "attributes"');} -let path='/databases/{databaseId}/collections/{collectionId}/indexes'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof key!=='undefined'){payload['key']=key;} -if(typeof type!=='undefined'){payload['type']=type;} -if(typeof attributes!=='undefined'){payload['attributes']=attributes;} -if(typeof orders!=='undefined'){payload['orders']=orders;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -getIndex(databaseId,collectionId,key){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -let path='/databases/{databaseId}/collections/{collectionId}/indexes/{key}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{key}',key);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -deleteIndex(databaseId,collectionId,key){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -if(typeof key==='undefined'){throw new AppwriteException('Missing required parameter: "key"');} -let path='/databases/{databaseId}/collections/{collectionId}/indexes/{key}'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId).replace('{key}',key);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -listCollectionLogs(databaseId,collectionId,queries){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -let path='/databases/{databaseId}/collections/{collectionId}/logs'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -getCollectionUsage(databaseId,collectionId,range){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -if(typeof collectionId==='undefined'){throw new AppwriteException('Missing required parameter: "collectionId"');} -let path='/databases/{databaseId}/collections/{collectionId}/usage'.replace('{databaseId}',databaseId).replace('{collectionId}',collectionId);let payload={};if(typeof range!=='undefined'){payload['range']=range;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -listLogs(databaseId,queries){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -let path='/databases/{databaseId}/logs'.replace('{databaseId}',databaseId);let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -getDatabaseUsage(databaseId,range){return __awaiter(this,void 0,void 0,function*(){if(typeof databaseId==='undefined'){throw new AppwriteException('Missing required parameter: "databaseId"');} -let path='/databases/{databaseId}/usage'.replace('{databaseId}',databaseId);let payload={};if(typeof range!=='undefined'){payload['range']=range;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});}} -class Functions extends Service{constructor(client){super(client);} -list(queries,search){return __awaiter(this,void 0,void 0,function*(){let path='/functions';let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -if(typeof search!=='undefined'){payload['search']=search;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -create(functionId,name,execute,runtime,events,schedule,timeout,enabled){return __awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');} -if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');} -if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');} -if(typeof runtime==='undefined'){throw new AppwriteException('Missing required parameter: "runtime"');} -let path='/functions';let payload={};if(typeof functionId!=='undefined'){payload['functionId']=functionId;} -if(typeof name!=='undefined'){payload['name']=name;} -if(typeof execute!=='undefined'){payload['execute']=execute;} -if(typeof runtime!=='undefined'){payload['runtime']=runtime;} -if(typeof events!=='undefined'){payload['events']=events;} -if(typeof schedule!=='undefined'){payload['schedule']=schedule;} -if(typeof timeout!=='undefined'){payload['timeout']=timeout;} -if(typeof enabled!=='undefined'){payload['enabled']=enabled;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('post',uri,{'content-type':'application/json',},payload);});} -listRuntimes(){return __awaiter(this,void 0,void 0,function*(){let path='/functions/runtimes';let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -getUsage(range){return __awaiter(this,void 0,void 0,function*(){let path='/functions/usage';let payload={};if(typeof range!=='undefined'){payload['range']=range;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -get(functionId){return __awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');} -let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -update(functionId,name,execute,events,schedule,timeout,enabled){return __awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');} -if(typeof name==='undefined'){throw new AppwriteException('Missing required parameter: "name"');} -if(typeof execute==='undefined'){throw new AppwriteException('Missing required parameter: "execute"');} -let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};if(typeof name!=='undefined'){payload['name']=name;} -if(typeof execute!=='undefined'){payload['execute']=execute;} -if(typeof events!=='undefined'){payload['events']=events;} -if(typeof schedule!=='undefined'){payload['schedule']=schedule;} -if(typeof timeout!=='undefined'){payload['timeout']=timeout;} -if(typeof enabled!=='undefined'){payload['enabled']=enabled;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('put',uri,{'content-type':'application/json',},payload);});} -delete(functionId){return __awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');} -let path='/functions/{functionId}'.replace('{functionId}',functionId);let payload={};const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('delete',uri,{'content-type':'application/json',},payload);});} -listDeployments(functionId,queries,search){return __awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');} -let path='/functions/{functionId}/deployments'.replace('{functionId}',functionId);let payload={};if(typeof queries!=='undefined'){payload['queries']=queries;} -if(typeof search!=='undefined'){payload['search']=search;} -const uri=new URL(this.client.config.endpoint+path);return yield this.client.call('get',uri,{'content-type':'application/json',},payload);});} -createDeployment(functionId,entrypoint,code,activate,onProgress=(progress)=>{}){return __awaiter(this,void 0,void 0,function*(){if(typeof functionId==='undefined'){throw new AppwriteException('Missing required parameter: "functionId"');} -if(typeof entrypoint==='undefined'){throw new AppwriteException('Missing required parameter: "entrypoint"');} -if(typeof code==='undefined'){throw new AppwriteException('Missing required parameter: "code"');} -if(typeof activate==='undefined'){throw new AppwriteException('Missing required parameter: "activate"');} -let path='/functions/{functionId}/deployments'.replace('{functionId}',functionId);let payload={};if(typeof entrypoint!=='undefined'){payload['entrypoint']=entrypoint;} -if(typeof code!=='undefined'){payload['code']=code;} -if(typeof activate!=='undefined'){payload['activate']=activate;} -const uri=new URL(this.client.config.endpoint+path);if(!(code instanceof File)){throw new AppwriteException('Parameter "code" has to be a File.');} -const size=code.size;if(size<=Service.CHUNK_SIZE){return yield this.client.call('post',uri,{'content-type':'multipart/form-data',},payload);} -let id=undefined;let response=undefined;const headers={'content-type':'multipart/form-data',};let counter=0;const totalCounters=Math.ceil(size/Service.CHUNK_SIZE);for(counter;counter{}){return __awaiter(this,void 0,void 0,function*(){if(typeof bucketId==='undefined'){throw new AppwriteException('Missing required parameter: "bucketId"');} -if(typeof fileId==='undefined'){throw new AppwriteException('Missing required parameter: "fileId"');} -if(typeof file==='undefined'){throw new AppwriteException('Missing required parameter: "file"');} -let path='/storage/buckets/{bucketId}/files'.replace('{bucketId}',bucketId);let payload={};if(typeof fileId!=='undefined'){payload['fileId']=fileId;} -if(typeof file!=='undefined'){payload['file']=file;} -if(typeof permissions!=='undefined'){payload['permissions']=permissions;} -const uri=new URL(this.client.config.endpoint+path);if(!(file instanceof File)){throw new AppwriteException('Parameter "file" has to be a File.');} -const size=file.size;if(size<=Service.CHUNK_SIZE){return yield this.client.call('post',uri,{'content-type':'multipart/form-data',},payload);} -let id=undefined;let response=undefined;const headers={'content-type':'multipart/form-data',};let counter=0;const totalCounters=Math.ceil(size/Service.CHUNK_SIZE);if(fileId!='unique()'){try{response=yield this.client.call('GET',new URL(this.client.config.endpoint+path+'/'+fileId),headers);counter=response.chunksUploaded;} -catch(e){}} -for(counter;counter{return`read("${role}")`;};Permission.write=(role)=>{return`write("${role}")`;};Permission.create=(role)=>{return`create("${role}")`;};Permission.update=(role)=>{return`update("${role}")`;};Permission.delete=(role)=>{return`delete("${role}")`;};class Role{static any(){return'any';} -static user(id){return`user:${id}`;} -static users(){return'users';} -static guests(){return'guests';} -static team(id,role=''){if(role===''){return`team:${id}`;} -return`team:${id}/${role}`;} -static status(status){return`status:${status}`;}} -class ID{static custom(id){return id;} -static unique(){return'unique()';}} -exports.Account=Account;exports.AppwriteException=AppwriteException;exports.Avatars=Avatars;exports.Client=Client;exports.Databases=Databases;exports.Functions=Functions;exports.Health=Health;exports.ID=ID;exports.Locale=Locale;exports.Permission=Permission;exports.Projects=Projects;exports.Query=Query;exports.Role=Role;exports.Storage=Storage;exports.Teams=Teams;exports.Users=Users;Object.defineProperty(exports,'__esModule',{value:true});})(this.Appwrite=this.Appwrite||{},null,window);(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory():typeof define==='function'&&define.amd?define(factory):(global=typeof globalThis!=='undefined'?globalThis:global||self,global.Chart=factory());})(this,(function(){'use strict';function noop(){} -const uid=(function(){let id=0;return function(){return id++;};}());function isNullOrUndef(value){return value===null||typeof value==='undefined';} -function isArray(value){if(Array.isArray&&Array.isArray(value)){return true;} -const type=Object.prototype.toString.call(value);if(type.slice(0,7)==='[object'&&type.slice(-6)==='Array]'){return true;} -return false;} -function isObject(value){return value!==null&&Object.prototype.toString.call(value)==='[object Object]';} -const isNumberFinite=(value)=>(typeof value==='number'||value instanceof Number)&&isFinite(+value);function finiteOrDefault(value,defaultValue){return isNumberFinite(value)?value:defaultValue;} -function valueOrDefault(value,defaultValue){return typeof value==='undefined'?defaultValue:value;} -const toPercentage=(value,dimension)=>typeof value==='string'&&value.endsWith('%')?parseFloat(value)/100:value/dimension;const toDimension=(value,dimension)=>typeof value==='string'&&value.endsWith('%')?parseFloat(value)/100*dimension:+value;function callback(fn,args,thisArg){if(fn&&typeof fn.call==='function'){return fn.apply(thisArg,args);}} -function each(loopable,fn,thisArg,reverse){let i,len,keys;if(isArray(loopable)){len=loopable.length;if(reverse){for(i=len-1;i>=0;i--){fn.call(thisArg,loopable[i],i);}}else{for(i=0;iv,x:o=>o.x,y:o=>o.y};function resolveObjectKey(obj,key){const resolver=keyResolvers[key]||(keyResolvers[key]=_getKeyResolver(key));return resolver(obj);} -function _getKeyResolver(key){const keys=_splitKey(key);return obj=>{for(const k of keys){if(k===''){break;} -obj=obj&&obj[k];} -return obj;};} -function _splitKey(key){const parts=key.split('.');const keys=[];let tmp='';for(const part of parts){tmp+=part;if(tmp.endsWith('\\')){tmp=tmp.slice(0,-1)+'.';}else{keys.push(tmp);tmp='';}} -return keys;} -function _capitalize(str){return str.charAt(0).toUpperCase()+str.slice(1);} -const defined=(value)=>typeof value!=='undefined';const isFunction=(value)=>typeof value==='function';const setsEqual=(a,b)=>{if(a.size!==b.size){return false;} -for(const item of a){if(!b.has(item)){return false;}} -return true;};function _isClickEvent(e){return e.type==='mouseup'||e.type==='click'||e.type==='contextmenu';} -const PI=Math.PI;const TAU=2*PI;const PITAU=TAU+PI;const INFINITY=Number.POSITIVE_INFINITY;const RAD_PER_DEG=PI/180;const HALF_PI=PI/2;const QUARTER_PI=PI/4;const TWO_THIRDS_PI=PI*2/3;const log10=Math.log10;const sign=Math.sign;function niceNum(range){const roundedRange=Math.round(range);range=almostEquals(range,roundedRange,range/1000)?roundedRange:range;const niceRange=Math.pow(10,Math.floor(log10(range)));const fraction=range/niceRange;const niceFraction=fraction<=1?1:fraction<=2?2:fraction<=5?5:10;return niceFraction*niceRange;} -function _factorize(value){const result=[];const sqrt=Math.sqrt(value);let i;for(i=1;ia-b).pop();return result;} -function isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n);} -function almostEquals(x,y,epsilon){return Math.abs(x-y)=x);} -function _setMinAndMaxByKey(array,target,property){let i,ilen,value;for(i=0,ilen=array.length;iangleToEnd&&startToAngle=Math.min(start,end)-epsilon&&value<=Math.max(start,end)+epsilon;} -function _lookup(table,value,cmp){cmp=cmp||((index)=>table[index]1){mid=(lo+hi)>>1;if(cmp(mid)){lo=mid;}else{hi=mid;}} -return{lo,hi};} -const _lookupByKey=(table,key,value,last)=>_lookup(table,value,last?index=>table[index][key]<=value:index=>table[index][key]_lookup(table,value,index=>table[index][key]>=value);function _filterBetween(values,min,max){let start=0;let end=values.length;while(startstart&&values[end-1]>max){end--;} -return start>0||end{const method='_onData'+_capitalize(key);const base=array[key];Object.defineProperty(array,key,{configurable:true,enumerable:false,value(...args){const res=base.apply(this,args);array._chartjs.listeners.forEach((object)=>{if(typeof object[method]==='function'){object[method](...args);}});return res;}});});} -function unlistenArrayEvents(array,listener){const stub=array._chartjs;if(!stub){return;} -const listeners=stub.listeners;const index=listeners.indexOf(listener);if(index!==-1){listeners.splice(index,1);} -if(listeners.length>0){return;} -arrayEvents.forEach((key)=>{delete array[key];});delete array._chartjs;} -function _arrayUnique(items){const set=new Set();let i,ilen;for(i=0,ilen=items.length;iArray.prototype.slice.call(args));let ticking=false;let args=[];return function(...rest){args=updateArgs(rest);if(!ticking){ticking=true;requestAnimFrame.call(window,()=>{ticking=false;fn.apply(thisArg,args);});}};} -function debounce(fn,delay){let timeout;return function(...args){if(delay){clearTimeout(timeout);timeout=setTimeout(fn,delay,args);}else{fn.apply(this,args);} -return delay;};} -const _toLeftRightCenter=(align)=>align==='start'?'left':align==='end'?'right':'center';const _alignStartEnd=(align,start,end)=>align==='start'?start:align==='end'?end:(start+end)/2;const _textX=(align,left,right,rtl)=>{const check=rtl?'left':'right';return align===check?right:align==='center'?(left+right)/2:left;};function _getStartAndCountOfVisiblePoints(meta,points,animationsDisabled){const pointCount=points.length;let start=0;let count=pointCount;if(meta._sorted){const{iScale,_parsed}=meta;const axis=iScale.axis;const{min,max,minDefined,maxDefined}=iScale.getUserBounds();if(minDefined){start=_limitValue(Math.min(_lookupByKey(_parsed,iScale.axis,min).lo,animationsDisabled?pointCount:_lookupByKey(points,axis,iScale.getPixelForValue(min)).lo),0,pointCount-1);} -if(maxDefined){count=_limitValue(Math.max(_lookupByKey(_parsed,iScale.axis,max,true).hi+1,animationsDisabled?0:_lookupByKey(points,axis,iScale.getPixelForValue(max),true).hi+1),start,pointCount)-start;}else{count=pointCount-start;}} -return{start,count};} -function _scaleRangesChanged(meta){const{xScale,yScale,_scaleRanges}=meta;const newRanges={xmin:xScale.min,xmax:xScale.max,ymin:yScale.min,ymax:yScale.max};if(!_scaleRanges){meta._scaleRanges=newRanges;return true;} -const changed=_scaleRanges.xmin!==xScale.min||_scaleRanges.xmax!==xScale.max||_scaleRanges.ymin!==yScale.min||_scaleRanges.ymax!==yScale.max;Object.assign(_scaleRanges,newRanges);return changed;} -class Animator{constructor(){this._request=null;this._charts=new Map();this._running=false;this._lastDate=undefined;} -_notify(chart,anims,date,type){const callbacks=anims.listeners[type];const numSteps=anims.duration;callbacks.forEach(fn=>fn({chart,initial:anims.initial,numSteps,currentStep:Math.min(date-anims.start,numSteps)}));} -_refresh(){if(this._request){return;} -this._running=true;this._request=requestAnimFrame.call(window,()=>{this._update();this._request=null;if(this._running){this._refresh();}});} -_update(date=Date.now()){let remaining=0;this._charts.forEach((anims,chart)=>{if(!anims.running||!anims.items.length){return;} -const items=anims.items;let i=items.length-1;let draw=false;let item;for(;i>=0;--i){item=items[i];if(item._active){if(item._total>anims.duration){anims.duration=item._total;} -item.tick(date);draw=true;}else{items[i]=items[items.length-1];items.pop();}} -if(draw){chart.draw();this._notify(chart,anims,date,'progress');} -if(!items.length){anims.running=false;this._notify(chart,anims,date,'complete');anims.initial=false;} -remaining+=items.length;});this._lastDate=date;if(remaining===0){this._running=false;}} -_getAnims(chart){const charts=this._charts;let anims=charts.get(chart);if(!anims){anims={running:false,initial:true,items:[],listeners:{complete:[],progress:[]}};charts.set(chart,anims);} -return anims;} -listen(chart,event,cb){this._getAnims(chart).listeners[event].push(cb);} -add(chart,items){if(!items||!items.length){return;} -this._getAnims(chart).items.push(...items);} -has(chart){return this._getAnims(chart).items.length>0;} -start(chart){const anims=this._charts.get(chart);if(!anims){return;} -anims.running=true;anims.start=Date.now();anims.duration=anims.items.reduce((acc,cur)=>Math.max(acc,cur._duration),0);this._refresh();} -running(chart){if(!this._running){return false;} -const anims=this._charts.get(chart);if(!anims||!anims.running||!anims.items.length){return false;} -return true;} -stop(chart){const anims=this._charts.get(chart);if(!anims||!anims.items.length){return;} -const items=anims.items;let i=items.length-1;for(;i>=0;--i){items[i].cancel();} -anims.items=[];this._notify(chart,anims,Date.now(),'complete');} -remove(chart){return this._charts.delete(chart);}} -var animator=new Animator();function round(v){return v+0.5|0;} -const lim=(v,l,h)=>Math.max(Math.min(v,h),l);function p2b(v){return lim(round(v*2.55),0,255);} -function n2b(v){return lim(round(v*255),0,255);} -function b2n(v){return lim(round(v/2.55)/100,0,1);} -function n2p(v){return lim(round(v*100),0,100);} -const map$1={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};const hex=[...'0123456789ABCDEF'];const h1=b=>hex[b&0xF];const h2=b=>hex[(b&0xF0)>>4]+hex[b&0xF];const eq=b=>((b&0xF0)>>4)===(b&0xF);const isShort=v=>eq(v.r)&&eq(v.g)&&eq(v.b)&&eq(v.a);function hexParse(str){var len=str.length;var ret;if(str[0]==='#'){if(len===4||len===5){ret={r:255&map$1[str[1]]*17,g:255&map$1[str[2]]*17,b:255&map$1[str[3]]*17,a:len===5?map$1[str[4]]*17:255};}else if(len===7||len===9){ret={r:map$1[str[1]]<<4|map$1[str[2]],g:map$1[str[3]]<<4|map$1[str[4]],b:map$1[str[5]]<<4|map$1[str[6]],a:len===9?(map$1[str[7]]<<4|map$1[str[8]]):255};}} -return ret;} -const alpha=(a,f)=>a<255?f(a):'';function hexString(v){var f=isShort(v)?h1:h2;return v?'#'+f(v.r)+f(v.g)+f(v.b)+alpha(v.a,f):undefined;} -const HUE_RE=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function hsl2rgbn(h,s,l){const a=s*Math.min(l,1-l);const f=(n,k=(n+h/30)%12)=>l-a*Math.max(Math.min(k-3,9-k,1),-1);return[f(0),f(8),f(4)];} -function hsv2rgbn(h,s,v){const f=(n,k=(n+h/60)%6)=>v-v*s*Math.max(Math.min(k,4-k,1),0);return[f(5),f(3),f(1)];} -function hwb2rgbn(h,w,b){const rgb=hsl2rgbn(h,1,0.5);let i;if(w+b>1){i=1/(w+b);w*=i;b*=i;} -for(i=0;i<3;i++){rgb[i]*=1-w-b;rgb[i]+=w;} -return rgb;} -function hueValue(r,g,b,d,max){if(r===max){return((g-b)/d)+(g0.5?d/(2-max-min):d/(max+min);h=hueValue(r,g,b,d,max);h=h*60+0.5;} -return[h|0,s||0,l];} -function calln(f,a,b,c){return(Array.isArray(a)?f(a[0],a[1],a[2]):f(a,b,c)).map(n2b);} -function hsl2rgb(h,s,l){return calln(hsl2rgbn,h,s,l);} -function hwb2rgb(h,w,b){return calln(hwb2rgbn,h,w,b);} -function hsv2rgb(h,s,v){return calln(hsv2rgbn,h,s,v);} -function hue(h){return(h%360+360)%360;} -function hueParse(str){const m=HUE_RE.exec(str);let a=255;let v;if(!m){return;} -if(m[5]!==v){a=m[6]?p2b(+m[5]):n2b(+m[5]);} -const h=hue(+m[2]);const p1=+m[3]/100;const p2=+m[4]/100;if(m[1]==='hwb'){v=hwb2rgb(h,p1,p2);}else if(m[1]==='hsv'){v=hsv2rgb(h,p1,p2);}else{v=hsl2rgb(h,p1,p2);} -return{r:v[0],g:v[1],b:v[2],a:a};} -function rotate(v,deg){var h=rgb2hsl(v);h[0]=hue(h[0]+deg);h=hsl2rgb(h);v.r=h[0];v.g=h[1];v.b=h[2];} -function hslString(v){if(!v){return;} -const a=rgb2hsl(v);const h=a[0];const s=n2p(a[1]);const l=n2p(a[2]);return v.a<255?`hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`:`hsl(${h}, ${s}%, ${l}%)`;} -const map$2={x:'dark',Z:'light',Y:'re',X:'blu',W:'gr',V:'medium',U:'slate',A:'ee',T:'ol',S:'or',B:'ra',C:'lateg',D:'ights',R:'in',Q:'turquois',E:'hi',P:'ro',O:'al',N:'le',M:'de',L:'yello',F:'en',K:'ch',G:'arks',H:'ea',I:'ightg',J:'wh'};const names$1={OiceXe:'f0f8ff',antiquewEte:'faebd7',aqua:'ffff',aquamarRe:'7fffd4',azuY:'f0ffff',beige:'f5f5dc',bisque:'ffe4c4',black:'0',blanKedOmond:'ffebcd',Xe:'ff',XeviTet:'8a2be2',bPwn:'a52a2a',burlywood:'deb887',caMtXe:'5f9ea0',KartYuse:'7fff00',KocTate:'d2691e',cSO:'ff7f50',cSnflowerXe:'6495ed',cSnsilk:'fff8dc',crimson:'dc143c',cyan:'ffff',xXe:'8b',xcyan:'8b8b',xgTMnPd:'b8860b',xWay:'a9a9a9',xgYF:'6400',xgYy:'a9a9a9',xkhaki:'bdb76b',xmagFta:'8b008b',xTivegYF:'556b2f',xSange:'ff8c00',xScEd:'9932cc',xYd:'8b0000',xsOmon:'e9967a',xsHgYF:'8fbc8f',xUXe:'483d8b',xUWay:'2f4f4f',xUgYy:'2f4f4f',xQe:'ced1',xviTet:'9400d3',dAppRk:'ff1493',dApskyXe:'bfff',dimWay:'696969',dimgYy:'696969',dodgerXe:'1e90ff',fiYbrick:'b22222',flSOwEte:'fffaf0',foYstWAn:'228b22',fuKsia:'ff00ff',gaRsbSo:'dcdcdc',ghostwEte:'f8f8ff',gTd:'ffd700',gTMnPd:'daa520',Way:'808080',gYF:'8000',gYFLw:'adff2f',gYy:'808080',honeyMw:'f0fff0',hotpRk:'ff69b4',RdianYd:'cd5c5c',Rdigo:'4b0082',ivSy:'fffff0',khaki:'f0e68c',lavFMr:'e6e6fa',lavFMrXsh:'fff0f5',lawngYF:'7cfc00',NmoncEffon:'fffacd',ZXe:'add8e6',ZcSO:'f08080',Zcyan:'e0ffff',ZgTMnPdLw:'fafad2',ZWay:'d3d3d3',ZgYF:'90ee90',ZgYy:'d3d3d3',ZpRk:'ffb6c1',ZsOmon:'ffa07a',ZsHgYF:'20b2aa',ZskyXe:'87cefa',ZUWay:'778899',ZUgYy:'778899',ZstAlXe:'b0c4de',ZLw:'ffffe0',lime:'ff00',limegYF:'32cd32',lRF:'faf0e6',magFta:'ff00ff',maPon:'800000',VaquamarRe:'66cdaa',VXe:'cd',VScEd:'ba55d3',VpurpN:'9370db',VsHgYF:'3cb371',VUXe:'7b68ee',VsprRggYF:'fa9a',VQe:'48d1cc',VviTetYd:'c71585',midnightXe:'191970',mRtcYam:'f5fffa',mistyPse:'ffe4e1',moccasR:'ffe4b5',navajowEte:'ffdead',navy:'80',Tdlace:'fdf5e6',Tive:'808000',TivedBb:'6b8e23',Sange:'ffa500',SangeYd:'ff4500',ScEd:'da70d6',pOegTMnPd:'eee8aa',pOegYF:'98fb98',pOeQe:'afeeee',pOeviTetYd:'db7093',papayawEp:'ffefd5',pHKpuff:'ffdab9',peru:'cd853f',pRk:'ffc0cb',plum:'dda0dd',powMrXe:'b0e0e6',purpN:'800080',YbeccapurpN:'663399',Yd:'ff0000',Psybrown:'bc8f8f',PyOXe:'4169e1',saddNbPwn:'8b4513',sOmon:'fa8072',sandybPwn:'f4a460',sHgYF:'2e8b57',sHshell:'fff5ee',siFna:'a0522d',silver:'c0c0c0',skyXe:'87ceeb',UXe:'6a5acd',UWay:'708090',UgYy:'708090',snow:'fffafa',sprRggYF:'ff7f',stAlXe:'4682b4',tan:'d2b48c',teO:'8080',tEstN:'d8bfd8',tomato:'ff6347',Qe:'40e0d0',viTet:'ee82ee',JHt:'f5deb3',wEte:'ffffff',wEtesmoke:'f5f5f5',Lw:'ffff00',LwgYF:'9acd32'};function unpack(){const unpacked={};const keys=Object.keys(names$1);const tkeys=Object.keys(map$2);let i,j,k,ok,nk;for(i=0;i>16&0xFF,k>>8&0xFF,k&0xFF];} -return unpacked;} -let names;function nameParse(str){if(!names){names=unpack();names.transparent=[0,0,0,0];} -const a=names[str.toLowerCase()];return a&&{r:a[0],g:a[1],b:a[2],a:a.length===4?a[3]:255};} -const RGB_RE=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function rgbParse(str){const m=RGB_RE.exec(str);let a=255;let r,g,b;if(!m){return;} -if(m[7]!==r){const v=+m[7];a=m[8]?p2b(v):lim(v*255,0,255);} -r=+m[1];g=+m[3];b=+m[5];r=255&(m[2]?p2b(r):lim(r,0,255));g=255&(m[4]?p2b(g):lim(g,0,255));b=255&(m[6]?p2b(b):lim(b,0,255));return{r:r,g:g,b:b,a:a};} -function rgbString(v){return v&&(v.a<255?`rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`:`rgb(${v.r}, ${v.g}, ${v.b})`);} -const to=v=>v<=0.0031308?v*12.92:Math.pow(v,1.0/2.4)*1.055-0.055;const from=v=>v<=0.04045?v/12.92:Math.pow((v+0.055)/1.055,2.4);function interpolate$1(rgb1,rgb2,t){const r=from(b2n(rgb1.r));const g=from(b2n(rgb1.g));const b=from(b2n(rgb1.b));return{r:n2b(to(r+t*(from(b2n(rgb2.r))-r))),g:n2b(to(g+t*(from(b2n(rgb2.g))-g))),b:n2b(to(b+t*(from(b2n(rgb2.b))-b))),a:rgb1.a+t*(rgb2.a-rgb1.a)};} -function modHSL(v,i,ratio){if(v){let tmp=rgb2hsl(v);tmp[i]=Math.max(0,Math.min(tmp[i]+tmp[i]*ratio,i===0?360:1));tmp=hsl2rgb(tmp);v.r=tmp[0];v.g=tmp[1];v.b=tmp[2];}} -function clone(v,proto){return v?Object.assign(proto||{},v):v;} -function fromObject(input){var v={r:0,g:0,b:0,a:255};if(Array.isArray(input)){if(input.length>=3){v={r:input[0],g:input[1],b:input[2],a:255};if(input.length>3){v.a=n2b(input[3]);}}}else{v=clone(input,{r:0,g:0,b:0,a:1});v.a=n2b(v.a);} -return v;} -function functionParse(str){if(str.charAt(0)==='r'){return rgbParse(str);} -return hueParse(str);} -class Color{constructor(input){if(input instanceof Color){return input;} -const type=typeof input;let v;if(type==='object'){v=fromObject(input);}else if(type==='string'){v=hexParse(input)||nameParse(input)||functionParse(input);} -this._rgb=v;this._valid=!!v;} -get valid(){return this._valid;} -get rgb(){var v=clone(this._rgb);if(v){v.a=b2n(v.a);} -return v;} -set rgb(obj){this._rgb=fromObject(obj);} -rgbString(){return this._valid?rgbString(this._rgb):undefined;} -hexString(){return this._valid?hexString(this._rgb):undefined;} -hslString(){return this._valid?hslString(this._rgb):undefined;} -mix(color,weight){if(color){const c1=this.rgb;const c2=color.rgb;let w2;const p=weight===w2?0.5:weight;const w=2*p-1;const a=c1.a-c2.a;const w1=((w*a===-1?w:(w+a)/(1+w*a))+1)/2.0;w2=1-w1;c1.r=0xFF&w1*c1.r+w2*c2.r+0.5;c1.g=0xFF&w1*c1.g+w2*c2.g+0.5;c1.b=0xFF&w1*c1.b+w2*c2.b+0.5;c1.a=p*c1.a+(1-p)*c2.a;this.rgb=c1;} -return this;} -interpolate(color,t){if(color){this._rgb=interpolate$1(this._rgb,color._rgb,t);} -return this;} -clone(){return new Color(this.rgb);} -alpha(a){this._rgb.a=n2b(a);return this;} -clearer(ratio){const rgb=this._rgb;rgb.a*=1-ratio;return this;} -greyscale(){const rgb=this._rgb;const val=round(rgb.r*0.3+rgb.g*0.59+rgb.b*0.11);rgb.r=rgb.g=rgb.b=val;return this;} -opaquer(ratio){const rgb=this._rgb;rgb.a*=1+ratio;return this;} -negate(){const v=this._rgb;v.r=255-v.r;v.g=255-v.g;v.b=255-v.b;return this;} -lighten(ratio){modHSL(this._rgb,2,ratio);return this;} -darken(ratio){modHSL(this._rgb,2,-ratio);return this;} -saturate(ratio){modHSL(this._rgb,1,ratio);return this;} -desaturate(ratio){modHSL(this._rgb,1,-ratio);return this;} -rotate(deg){rotate(this._rgb,deg);return this;}} -function index_esm(input){return new Color(input);} -function isPatternOrGradient(value){if(value&&typeof value==='object'){const type=value.toString();return type==='[object CanvasPattern]'||type==='[object CanvasGradient]';} -return false;} -function color(value){return isPatternOrGradient(value)?value:index_esm(value);} -function getHoverColor(value){return isPatternOrGradient(value)?value:index_esm(value).saturate(0.5).darken(0.1).hexString();} -const overrides=Object.create(null);const descriptors=Object.create(null);function getScope$1(node,key){if(!key){return node;} -const keys=key.split('.');for(let i=0,n=keys.length;icontext.chart.platform.getDevicePixelRatio();this.elements={};this.events=['mousemove','mouseout','click','touchstart','touchmove'];this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:'normal',lineHeight:1.2,weight:null};this.hover={};this.hoverBackgroundColor=(ctx,options)=>getHoverColor(options.backgroundColor);this.hoverBorderColor=(ctx,options)=>getHoverColor(options.borderColor);this.hoverColor=(ctx,options)=>getHoverColor(options.color);this.indexAxis='x';this.interaction={mode:'nearest',intersect:true,includeInvisible:false};this.maintainAspectRatio=true;this.onHover=null;this.onClick=null;this.parsing=true;this.plugins={};this.responsive=true;this.scale=undefined;this.scales={};this.showLine=true;this.drawActiveElementsOnTop=true;this.describe(_descriptors);} -set(scope,values){return set(this,scope,values);} -get(scope){return getScope$1(this,scope);} -describe(scope,values){return set(descriptors,scope,values);} -override(scope,values){return set(overrides,scope,values);} -route(scope,name,targetScope,targetName){const scopeObject=getScope$1(this,scope);const targetScopeObject=getScope$1(this,targetScope);const privateName='_'+name;Object.defineProperties(scopeObject,{[privateName]:{value:scopeObject[name],writable:true},[name]:{enumerable:true,get(){const local=this[privateName];const target=targetScopeObject[targetName];if(isObject(local)){return Object.assign({},target,local);} -return valueOrDefault(local,target);},set(value){this[privateName]=value;}}});}} -var defaults=new Defaults({_scriptable:(name)=>!name.startsWith('on'),_indexable:(name)=>name!=='events',hover:{_fallback:'interaction'},interaction:{_scriptable:false,_indexable:false,}});function _isDomSupported(){return typeof window!=='undefined'&&typeof document!=='undefined';} -function _getParentNode(domNode){let parent=domNode.parentNode;if(parent&&parent.toString()==='[object ShadowRoot]'){parent=parent.host;} -return parent;} -function parseMaxStyle(styleValue,node,parentProperty){let valueInPixels;if(typeof styleValue==='string'){valueInPixels=parseInt(styleValue,10);if(styleValue.indexOf('%')!==-1){valueInPixels=valueInPixels/100*node.parentNode[parentProperty];}}else{valueInPixels=styleValue;} -return valueInPixels;} -const getComputedStyle=(element)=>window.getComputedStyle(element,null);function getStyle(el,property){return getComputedStyle(el).getPropertyValue(property);} -const positions=['top','right','bottom','left'];function getPositionedStyle(styles,style,suffix){const result={};suffix=suffix?'-'+suffix:'';for(let i=0;i<4;i++){const pos=positions[i];result[pos]=parseFloat(styles[style+'-'+pos+suffix])||0;} -result.width=result.left+result.right;result.height=result.top+result.bottom;return result;} -const useOffsetPos=(x,y,target)=>(x>0||y>0)&&(!target||!target.shadowRoot);function getCanvasPosition(e,canvas){const touches=e.touches;const source=touches&&touches.length?touches[0]:e;const{offsetX,offsetY}=source;let box=false;let x,y;if(useOffsetPos(offsetX,offsetY,e.target)){x=offsetX;y=offsetY;}else{const rect=canvas.getBoundingClientRect();x=source.clientX-rect.left;y=source.clientY-rect.top;box=true;} -return{x,y,box};} -function getRelativePosition(evt,chart){if('native'in evt){return evt;} -const{canvas,currentDevicePixelRatio}=chart;const style=getComputedStyle(canvas);const borderBox=style.boxSizing==='border-box';const paddings=getPositionedStyle(style,'padding');const borders=getPositionedStyle(style,'border','width');const{x,y,box}=getCanvasPosition(evt,canvas);const xOffset=paddings.left+(box&&borders.left);const yOffset=paddings.top+(box&&borders.top);let{width,height}=chart;if(borderBox){width-=paddings.width+borders.width;height-=paddings.height+borders.height;} -return{x:Math.round((x-xOffset)/width*canvas.width/currentDevicePixelRatio),y:Math.round((y-yOffset)/height*canvas.height/currentDevicePixelRatio)};} -function getContainerSize(canvas,width,height){let maxWidth,maxHeight;if(width===undefined||height===undefined){const container=_getParentNode(canvas);if(!container){width=canvas.clientWidth;height=canvas.clientHeight;}else{const rect=container.getBoundingClientRect();const containerStyle=getComputedStyle(container);const containerBorder=getPositionedStyle(containerStyle,'border','width');const containerPadding=getPositionedStyle(containerStyle,'padding');width=rect.width-containerPadding.width-containerBorder.width;height=rect.height-containerPadding.height-containerBorder.height;maxWidth=parseMaxStyle(containerStyle.maxWidth,container,'clientWidth');maxHeight=parseMaxStyle(containerStyle.maxHeight,container,'clientHeight');}} -return{width,height,maxWidth:maxWidth||INFINITY,maxHeight:maxHeight||INFINITY};} -const round1=v=>Math.round(v*10)/10;function getMaximumSize(canvas,bbWidth,bbHeight,aspectRatio){const style=getComputedStyle(canvas);const margins=getPositionedStyle(style,'margin');const maxWidth=parseMaxStyle(style.maxWidth,canvas,'clientWidth')||INFINITY;const maxHeight=parseMaxStyle(style.maxHeight,canvas,'clientHeight')||INFINITY;const containerSize=getContainerSize(canvas,bbWidth,bbHeight);let{width,height}=containerSize;if(style.boxSizing==='content-box'){const borders=getPositionedStyle(style,'border','width');const paddings=getPositionedStyle(style,'padding');width-=paddings.width+borders.width;height-=paddings.height+borders.height;} -width=Math.max(0,width-margins.width);height=Math.max(0,aspectRatio?Math.floor(width/aspectRatio):height-margins.height);width=round1(Math.min(width,maxWidth,containerSize.maxWidth));height=round1(Math.min(height,maxHeight,containerSize.maxHeight));if(width&&!height){height=round1(width/2);} -return{width,height};} -function retinaScale(chart,forceRatio,forceStyle){const pixelRatio=forceRatio||1;const deviceHeight=Math.floor(chart.height*pixelRatio);const deviceWidth=Math.floor(chart.width*pixelRatio);chart.height=deviceHeight/pixelRatio;chart.width=deviceWidth/pixelRatio;const canvas=chart.canvas;if(canvas.style&&(forceStyle||(!canvas.style.height&&!canvas.style.width))){canvas.style.height=`${chart.height}px`;canvas.style.width=`${chart.width}px`;} -if(chart.currentDevicePixelRatio!==pixelRatio||canvas.height!==deviceHeight||canvas.width!==deviceWidth){chart.currentDevicePixelRatio=pixelRatio;canvas.height=deviceHeight;canvas.width=deviceWidth;chart.ctx.setTransform(pixelRatio,0,0,pixelRatio,0,0);return true;} -return false;} -const supportsEventListenerOptions=(function(){let passiveSupported=false;try{const options={get passive(){passiveSupported=true;return false;}};window.addEventListener('test',null,options);window.removeEventListener('test',null,options);}catch(e){} -return passiveSupported;}());function readUsedSize(element,property){const value=getStyle(element,property);const matches=value&&value.match(/^(\d+)(\.\d+)?px$/);return matches?+matches[1]:undefined;} -function toFontString(font){if(!font||isNullOrUndef(font.size)||isNullOrUndef(font.family)){return null;} -return(font.style?font.style+' ':'') -+(font.weight?font.weight+' ':'') -+font.size+'px ' -+font.family;} -function _measureText(ctx,data,gc,longest,string){let textWidth=data[string];if(!textWidth){textWidth=data[string]=ctx.measureText(string).width;gc.push(string);} -if(textWidth>longest){longest=textWidth;} -return longest;} -function _longestText(ctx,font,arrayOfThings,cache){cache=cache||{};let data=cache.data=cache.data||{};let gc=cache.garbageCollect=cache.garbageCollect||[];if(cache.font!==font){data=cache.data={};gc=cache.garbageCollect=[];cache.font=font;} -ctx.save();ctx.font=font;let longest=0;const ilen=arrayOfThings.length;let i,j,jlen,thing,nestedThing;for(i=0;iarrayOfThings.length){for(i=0;i0){ctx.stroke();}} -function _isPointInArea(point,area,margin){margin=margin||0.5;return!area||(point&&point.x>area.left-margin&&point.xarea.top-margin&&point.y0&&opts.strokeColor!=='';let i,line;ctx.save();ctx.font=font.string;setRenderOpts(ctx,opts);for(i=0;iscopes[0]){if(!defined(fallback)){fallback=_resolve('_fallback',scopes);} -const cache={[Symbol.toStringTag]:'Object',_cacheable:true,_scopes:scopes,_rootScopes:rootScopes,_fallback:fallback,_getTarget:getTarget,override:(scope)=>_createResolver([scope,...scopes],prefixes,rootScopes,fallback),};return new Proxy(cache,{deleteProperty(target,prop){delete target[prop];delete target._keys;delete scopes[0][prop];return true;},get(target,prop){return _cached(target,prop,()=>_resolveWithPrefixes(prop,prefixes,scopes,target));},getOwnPropertyDescriptor(target,prop){return Reflect.getOwnPropertyDescriptor(target._scopes[0],prop);},getPrototypeOf(){return Reflect.getPrototypeOf(scopes[0]);},has(target,prop){return getKeysFromAllScopes(target).includes(prop);},ownKeys(target){return getKeysFromAllScopes(target);},set(target,prop,value){const storage=target._storage||(target._storage=getTarget());target[prop]=storage[prop]=value;delete target._keys;return true;}});} -function _attachContext(proxy,context,subProxy,descriptorDefaults){const cache={_cacheable:false,_proxy:proxy,_context:context,_subProxy:subProxy,_stack:new Set(),_descriptors:_descriptors(proxy,descriptorDefaults),setContext:(ctx)=>_attachContext(proxy,ctx,subProxy,descriptorDefaults),override:(scope)=>_attachContext(proxy.override(scope),context,subProxy,descriptorDefaults)};return new Proxy(cache,{deleteProperty(target,prop){delete target[prop];delete proxy[prop];return true;},get(target,prop,receiver){return _cached(target,prop,()=>_resolveWithContext(target,prop,receiver));},getOwnPropertyDescriptor(target,prop){return target._descriptors.allKeys?Reflect.has(proxy,prop)?{enumerable:true,configurable:true}:undefined:Reflect.getOwnPropertyDescriptor(proxy,prop);},getPrototypeOf(){return Reflect.getPrototypeOf(proxy);},has(target,prop){return Reflect.has(proxy,prop);},ownKeys(){return Reflect.ownKeys(proxy);},set(target,prop,value){proxy[prop]=value;delete target[prop];return true;}});} -function _descriptors(proxy,defaults={scriptable:true,indexable:true}){const{_scriptable=defaults.scriptable,_indexable=defaults.indexable,_allKeys=defaults.allKeys}=proxy;return{allKeys:_allKeys,scriptable:_scriptable,indexable:_indexable,isScriptable:isFunction(_scriptable)?_scriptable:()=>_scriptable,isIndexable:isFunction(_indexable)?_indexable:()=>_indexable};} -const readKey=(prefix,name)=>prefix?prefix+_capitalize(name):name;const needsSubResolver=(prop,value)=>isObject(value)&&prop!=='adapters'&&(Object.getPrototypeOf(value)===null||value.constructor===Object);function _cached(target,prop,resolve){if(Object.prototype.hasOwnProperty.call(target,prop)){return target[prop];} -const value=resolve();target[prop]=value;return value;} -function _resolveWithContext(target,prop,receiver){const{_proxy,_context,_subProxy,_descriptors:descriptors}=target;let value=_proxy[prop];if(isFunction(value)&&descriptors.isScriptable(prop)){value=_resolveScriptable(prop,value,target,receiver);} -if(isArray(value)&&value.length){value=_resolveArray(prop,value,target,descriptors.isIndexable);} -if(needsSubResolver(prop,value)){value=_attachContext(value,_context,_subProxy&&_subProxy[prop],descriptors);} -return value;} -function _resolveScriptable(prop,value,target,receiver){const{_proxy,_context,_subProxy,_stack}=target;if(_stack.has(prop)){throw new Error('Recursion detected: '+Array.from(_stack).join('->')+'->'+prop);} -_stack.add(prop);value=value(_context,_subProxy||receiver);_stack.delete(prop);if(needsSubResolver(prop,value)){value=createSubResolver(_proxy._scopes,_proxy,prop,value);} -return value;} -function _resolveArray(prop,value,target,isIndexable){const{_proxy,_context,_subProxy,_descriptors:descriptors}=target;if(defined(_context.index)&&isIndexable(prop)){value=value[_context.index%value.length];}else if(isObject(value[0])){const arr=value;const scopes=_proxy._scopes.filter(s=>s!==arr);value=[];for(const item of arr){const resolver=createSubResolver(scopes,_proxy,prop,item);value.push(_attachContext(resolver,_context,_subProxy&&_subProxy[prop],descriptors));}} -return value;} -function resolveFallback(fallback,prop,value){return isFunction(fallback)?fallback(prop,value):fallback;} -const getScope=(key,parent)=>key===true?parent:typeof key==='string'?resolveObjectKey(parent,key):undefined;function addScopes(set,parentScopes,key,parentFallback,value){for(const parent of parentScopes){const scope=getScope(key,parent);if(scope){set.add(scope);const fallback=resolveFallback(scope._fallback,key,value);if(defined(fallback)&&fallback!==key&&fallback!==parentFallback){return fallback;}}else if(scope===false&&defined(parentFallback)&&key!==parentFallback){return null;}} -return false;} -function createSubResolver(parentScopes,resolver,prop,value){const rootScopes=resolver._rootScopes;const fallback=resolveFallback(resolver._fallback,prop,value);const allScopes=[...parentScopes,...rootScopes];const set=new Set();set.add(value);let key=addScopesFromKey(set,allScopes,prop,fallback||prop,value);if(key===null){return false;} -if(defined(fallback)&&fallback!==prop){key=addScopesFromKey(set,allScopes,fallback,key,value);if(key===null){return false;}} -return _createResolver(Array.from(set),[''],rootScopes,fallback,()=>subGetTarget(resolver,prop,value));} -function addScopesFromKey(set,allScopes,key,fallback,item){while(key){key=addScopes(set,allScopes,key,fallback,item);} -return key;} -function subGetTarget(resolver,prop,value){const parent=resolver._getTarget();if(!(prop in parent)){parent[prop]={};} -const target=parent[prop];if(isArray(target)&&isObject(value)){return value;} -return target;} -function _resolveWithPrefixes(prop,prefixes,scopes,proxy){let value;for(const prefix of prefixes){value=_resolve(readKey(prefix,prop),scopes);if(defined(value)){return needsSubResolver(prop,value)?createSubResolver(scopes,proxy,prop,value):value;}}} -function _resolve(key,scopes){for(const scope of scopes){if(!scope){continue;} -const value=scope[key];if(defined(value)){return value;}}} -function getKeysFromAllScopes(target){let keys=target._keys;if(!keys){keys=target._keys=resolveKeysFromAllScopes(target._scopes);} -return keys;} -function resolveKeysFromAllScopes(scopes){const set=new Set();for(const scope of scopes){for(const key of Object.keys(scope).filter(k=>!k.startsWith('_'))){set.add(key);}} -return Array.from(set);} -function _parseObjectDataRadialScale(meta,data,start,count){const{iScale}=meta;const{key='r'}=this._parsing;const parsed=new Array(count);let i,ilen,index,item;for(i=0,ilen=count;iiindexAxis==='x'?'y':'x';function splineCurve(firstPoint,middlePoint,afterPoint,t){const previous=firstPoint.skip?middlePoint:firstPoint;const current=middlePoint;const next=afterPoint.skip?middlePoint:afterPoint;const d01=distanceBetweenPoints(current,previous);const d12=distanceBetweenPoints(next,current);let s01=d01/(d01+d12);let s12=d12/(d01+d12);s01=isNaN(s01)?0:s01;s12=isNaN(s12)?0:s12;const fa=t*s01;const fb=t*s12;return{previous:{x:current.x-fa*(next.x-previous.x),y:current.y-fa*(next.y-previous.y)},next:{x:current.x+fb*(next.x-previous.x),y:current.y+fb*(next.y-previous.y)}};} -function monotoneAdjust(points,deltaK,mK){const pointsLen=points.length;let alphaK,betaK,tauK,squaredMagnitude,pointCurrent;let pointAfter=getPoint(points,0);for(let i=0;i!pt.skip);} -if(options.cubicInterpolationMode==='monotone'){splineCurveMonotone(points,indexAxis);}else{let prev=loop?points[points.length-1]:points[0];for(i=0,ilen=points.length;it===0||t===1;const elasticIn=(t,s,p)=>-(Math.pow(2,10*(t-=1))*Math.sin((t-s)*TAU/p));const elasticOut=(t,s,p)=>Math.pow(2,-10*t)*Math.sin((t-s)*TAU/p)+1;const effects={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>((t/=0.5)<1)?0.5*t*t:-0.5*((--t)*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>((t/=0.5)<1)?0.5*t*t*t:0.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>((t/=0.5)<1)?0.5*t*t*t*t:-0.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>((t/=0.5)<1)?0.5*t*t*t*t*t:0.5*((t-=2)*t*t*t*t+2),easeInSine:t=>-Math.cos(t*HALF_PI)+1,easeOutSine:t=>Math.sin(t*HALF_PI),easeInOutSine:t=>-0.5*(Math.cos(PI*t)-1),easeInExpo:t=>(t===0)?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>(t===1)?1:-Math.pow(2,-10*t)+1,easeInOutExpo:t=>atEdge(t)?t:t<0.5?0.5*Math.pow(2,10*(t*2-1)):0.5*(-Math.pow(2,-10*(t*2-1))+2),easeInCirc:t=>(t>=1)?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>((t/=0.5)<1)?-0.5*(Math.sqrt(1-t*t)-1):0.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>atEdge(t)?t:elasticIn(t,0.075,0.3),easeOutElastic:t=>atEdge(t)?t:elasticOut(t,0.075,0.3),easeInOutElastic(t){const s=0.1125;const p=0.45;return atEdge(t)?t:t<0.5?0.5*elasticIn(t*2,s,p):0.5+0.5*elasticOut(t*2-1,s,p);},easeInBack(t){const s=1.70158;return t*t*((s+1)*t-s);},easeOutBack(t){const s=1.70158;return(t-=1)*t*((s+1)*t+s)+1;},easeInOutBack(t){let s=1.70158;if((t/=0.5)<1){return 0.5*(t*t*(((s*=(1.525))+1)*t-s));} -return 0.5*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2);},easeInBounce:t=>1-effects.easeOutBounce(1-t),easeOutBounce(t){const m=7.5625;const d=2.75;if(t<(1/d)){return m*t*t;} -if(t<(2/d)){return m*(t-=(1.5/d))*t+0.75;} -if(t<(2.5/d)){return m*(t-=(2.25/d))*t+0.9375;} -return m*(t-=(2.625/d))*t+0.984375;},easeInOutBounce:t=>(t<0.5)?effects.easeInBounce(t*2)*0.5:effects.easeOutBounce(t*2-1)*0.5+0.5,};function _pointInLine(p1,p2,t,mode){return{x:p1.x+t*(p2.x-p1.x),y:p1.y+t*(p2.y-p1.y)};} -function _steppedInterpolation(p1,p2,t,mode){return{x:p1.x+t*(p2.x-p1.x),y:mode==='middle'?t<0.5?p1.y:p2.y:mode==='after'?t<1?p1.y:p2.y:t>0?p2.y:p1.y};} -function _bezierInterpolation(p1,p2,t,mode){const cp1={x:p1.cp2x,y:p1.cp2y};const cp2={x:p2.cp1x,y:p2.cp1y};const a=_pointInLine(p1,cp1,t);const b=_pointInLine(cp1,cp2,t);const c=_pointInLine(cp2,p2,t);const d=_pointInLine(a,b,t);const e=_pointInLine(b,c,t);return _pointInLine(d,e,t);} -const intlCache=new Map();function getNumberFormat(locale,options){options=options||{};const cacheKey=locale+JSON.stringify(options);let formatter=intlCache.get(cacheKey);if(!formatter){formatter=new Intl.NumberFormat(locale,options);intlCache.set(cacheKey,formatter);} -return formatter;} -function formatNumber(num,locale,options){return getNumberFormat(locale,options).format(num);} -const LINE_HEIGHT=new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);const FONT_STYLE=new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);function toLineHeight(value,size){const matches=(''+value).match(LINE_HEIGHT);if(!matches||matches[1]==='normal'){return size*1.2;} -value=+matches[2];switch(matches[3]){case'px':return value;case'%':value/=100;break;} -return size*value;} -const numberOrZero=v=>+v||0;function _readValueToProps(value,props){const ret={};const objProps=isObject(props);const keys=objProps?Object.keys(props):props;const read=isObject(value)?objProps?prop=>valueOrDefault(value[prop],value[props[prop]]):prop=>value[prop]:()=>value;for(const prop of keys){ret[prop]=numberOrZero(read(prop));} -return ret;} -function toTRBL(value){return _readValueToProps(value,{top:'y',right:'x',bottom:'y',left:'x'});} -function toTRBLCorners(value){return _readValueToProps(value,['topLeft','topRight','bottomLeft','bottomRight']);} -function toPadding(value){const obj=toTRBL(value);obj.width=obj.left+obj.right;obj.height=obj.top+obj.bottom;return obj;} -function toFont(options,fallback){options=options||{};fallback=fallback||defaults.font;let size=valueOrDefault(options.size,fallback.size);if(typeof size==='string'){size=parseInt(size,10);} -let style=valueOrDefault(options.style,fallback.style);if(style&&!(''+style).match(FONT_STYLE)){console.warn('Invalid font style specified: "'+style+'"');style='';} -const font={family:valueOrDefault(options.family,fallback.family),lineHeight:toLineHeight(valueOrDefault(options.lineHeight,fallback.lineHeight),size),size,style,weight:valueOrDefault(options.weight,fallback.weight),string:''};font.string=toFontString(font);return font;} -function resolve(inputs,context,index,info){let cacheable=true;let i,ilen,value;for(i=0,ilen=inputs.length;ibeginAtZero&&value===0?0:value+add;return{min:keepZero(min,-Math.abs(change)),max:keepZero(max,change)};} -function createContext(parentContext,context){return Object.assign(Object.create(parentContext),context);} -const getRightToLeftAdapter=function(rectX,width){return{x(x){return rectX+rectX+width-x;},setWidth(w){width=w;},textAlign(align){if(align==='center'){return align;} -return align==='right'?'left':'right';},xPlus(x,value){return x-value;},leftForLtr(x,itemWidth){return x-itemWidth;},};};const getLeftToRightAdapter=function(){return{x(x){return x;},setWidth(w){},textAlign(align){return align;},xPlus(x,value){return x+value;},leftForLtr(x,_itemWidth){return x;},};};function getRtlAdapter(rtl,rectX,width){return rtl?getRightToLeftAdapter(rectX,width):getLeftToRightAdapter();} -function overrideTextDirection(ctx,direction){let style,original;if(direction==='ltr'||direction==='rtl'){style=ctx.canvas.style;original=[style.getPropertyValue('direction'),style.getPropertyPriority('direction'),];style.setProperty('direction',direction,'important');ctx.prevTextDirection=original;}} -function restoreTextDirection(ctx,original){if(original!==undefined){delete ctx.prevTextDirection;ctx.canvas.style.setProperty('direction',original[0],original[1]);}} -function propertyFn(property){if(property==='angle'){return{between:_angleBetween,compare:_angleDiff,normalize:_normalizeAngle,};} -return{between:_isBetween,compare:(a,b)=>a-b,normalize:x=>x};} -function normalizeSegment({start,end,count,loop,style}){return{start:start%count,end:end%count,loop:loop&&(end-start+1)%count===0,style};} -function getSegment(segment,points,bounds){const{property,start:startBound,end:endBound}=bounds;const{between,normalize}=propertyFn(property);const count=points.length;let{start,end,loop}=segment;let i,ilen;if(loop){start+=count;end+=count;for(i=0,ilen=count;ibetween(startBound,prevValue,value)&&compare(startBound,prevValue)!==0;const endIsBefore=()=>compare(endBound,value)===0||between(endBound,prevValue,value);const shouldStart=()=>inside||startIsBefore();const shouldStop=()=>!inside||endIsBefore();for(let i=start,prev=start;i<=end;++i){point=points[i%count];if(point.skip){continue;} -value=normalize(point[property]);if(value===prevValue){continue;} -inside=between(value,startBound,endBound);if(subStart===null&&shouldStart()){subStart=compare(value,startBound)===0?i:prev;} -if(subStart!==null&&shouldStop()){result.push(normalizeSegment({start:subStart,end:i,loop,count,style}));subStart=null;} -prev=i;prevValue=value;} -if(subStart!==null){result.push(normalizeSegment({start:subStart,end,loop,count,style}));} -return result;} -function _boundSegments(line,bounds){const result=[];const segments=line.segments;for(let i=0;istart&&points[end%count].skip){end--;} -end%=count;return{start,end};} -function solidSegments(points,start,max,loop){const count=points.length;const result=[];let last=start;let prev=points[start];let end;for(end=start+1;end<=max;++end){const cur=points[end%count];if(cur.skip||cur.stop){if(!prev.skip){loop=false;result.push({start:start%count,end:(end-1)%count,loop});start=last=cur.stop?end:null;}}else{last=end;if(prev.skip){start=end;}} -prev=cur;} -if(last!==null){result.push({start:start%count,end:last%count,loop});} -return result;} -function _computeSegments(line,segmentOptions){const points=line.points;const spanGaps=line.options.spanGaps;const count=points.length;if(!count){return[];} -const loop=!!line._loop;const{start,end}=findStartAndEnd(points,count,loop,spanGaps);if(spanGaps===true){return splitByStyles(line,[{start,end,loop}],points,segmentOptions);} -const max=end{if(element[rangeMethod](position[axis],useFinalPosition)){items.push({element,datasetIndex,index});intersectsItem=intersectsItem||element.inRange(position.x,position.y,useFinalPosition);}});if(intersect&&!intersectsItem){return[];} -return items;} -var Interaction={evaluateInteractionItems,modes:{index(chart,e,options,useFinalPosition){const position=getRelativePosition(e,chart);const axis=options.axis||'x';const includeInvisible=options.includeInvisible||false;const items=options.intersect?getIntersectItems(chart,position,axis,useFinalPosition,includeInvisible):getNearestItems(chart,position,axis,false,useFinalPosition,includeInvisible);const elements=[];if(!items.length){return[];} -chart.getSortedVisibleDatasetMetas().forEach((meta)=>{const index=items[0].index;const element=meta.data[index];if(element&&!element.skip){elements.push({element,datasetIndex:meta.index,index});}});return elements;},dataset(chart,e,options,useFinalPosition){const position=getRelativePosition(e,chart);const axis=options.axis||'xy';const includeInvisible=options.includeInvisible||false;let items=options.intersect?getIntersectItems(chart,position,axis,useFinalPosition,includeInvisible):getNearestItems(chart,position,axis,false,useFinalPosition,includeInvisible);if(items.length>0){const datasetIndex=items[0].datasetIndex;const data=chart.getDatasetMeta(datasetIndex).data;items=[];for(let i=0;iv.pos===position);} -function filterDynamicPositionByAxis(array,axis){return array.filter(v=>STATIC_POSITIONS.indexOf(v.pos)===-1&&v.box.axis===axis);} -function sortByWeight(array,reverse){return array.sort((a,b)=>{const v0=reverse?b:a;const v1=reverse?a:b;return v0.weight===v1.weight?v0.index-v1.index:v0.weight-v1.weight;});} -function wrapBoxes(boxes){const layoutBoxes=[];let i,ilen,box,pos,stack,stackWeight;for(i=0,ilen=(boxes||[]).length;iwrap.box.fullSize),true);const left=sortByWeight(filterByPosition(layoutBoxes,'left'),true);const right=sortByWeight(filterByPosition(layoutBoxes,'right'));const top=sortByWeight(filterByPosition(layoutBoxes,'top'),true);const bottom=sortByWeight(filterByPosition(layoutBoxes,'bottom'));const centerHorizontal=filterDynamicPositionByAxis(layoutBoxes,'x');const centerVertical=filterDynamicPositionByAxis(layoutBoxes,'y');return{fullSize,leftAndTop:left.concat(top),rightAndBottom:right.concat(centerVertical).concat(bottom).concat(centerHorizontal),chartArea:filterByPosition(layoutBoxes,'chartArea'),vertical:left.concat(right).concat(centerVertical),horizontal:top.concat(bottom).concat(centerHorizontal)};} -function getCombinedMax(maxPadding,chartArea,a,b){return Math.max(maxPadding[a],chartArea[a])+Math.max(maxPadding[b],chartArea[b]);} -function updateMaxPadding(maxPadding,boxPadding){maxPadding.top=Math.max(maxPadding.top,boxPadding.top);maxPadding.left=Math.max(maxPadding.left,boxPadding.left);maxPadding.bottom=Math.max(maxPadding.bottom,boxPadding.bottom);maxPadding.right=Math.max(maxPadding.right,boxPadding.right);} -function updateDims(chartArea,params,layout,stacks){const{pos,box}=layout;const maxPadding=chartArea.maxPadding;if(!isObject(pos)){if(layout.size){chartArea[pos]-=layout.size;} -const stack=stacks[layout.stack]||{size:0,count:1};stack.size=Math.max(stack.size,layout.horizontal?box.height:box.width);layout.size=stack.size/stack.count;chartArea[pos]+=layout.size;} -if(box.getPadding){updateMaxPadding(maxPadding,box.getPadding());} -const newWidth=Math.max(0,params.outerWidth-getCombinedMax(maxPadding,chartArea,'left','right'));const newHeight=Math.max(0,params.outerHeight-getCombinedMax(maxPadding,chartArea,'top','bottom'));const widthChanged=newWidth!==chartArea.w;const heightChanged=newHeight!==chartArea.h;chartArea.w=newWidth;chartArea.h=newHeight;return layout.horizontal?{same:widthChanged,other:heightChanged}:{same:heightChanged,other:widthChanged};} -function handleMaxPadding(chartArea){const maxPadding=chartArea.maxPadding;function updatePos(pos){const change=Math.max(maxPadding[pos]-chartArea[pos],0);chartArea[pos]+=change;return change;} -chartArea.y+=updatePos('top');chartArea.x+=updatePos('left');updatePos('right');updatePos('bottom');} -function getMargins(horizontal,chartArea){const maxPadding=chartArea.maxPadding;function marginForPositions(positions){const margin={left:0,top:0,right:0,bottom:0};positions.forEach((pos)=>{margin[pos]=Math.max(chartArea[pos],maxPadding[pos]);});return margin;} -return horizontal?marginForPositions(['left','right']):marginForPositions(['top','bottom']);} -function fitBoxes(boxes,chartArea,params,stacks){const refitBoxes=[];let i,ilen,layout,box,refit,changed;for(i=0,ilen=boxes.length,refit=0;i{if(typeof box.beforeLayout==='function'){box.beforeLayout();}});const visibleVerticalBoxCount=verticalBoxes.reduce((total,wrap)=>wrap.box.options&&wrap.box.options.display===false?total:total+1,0)||1;const params=Object.freeze({outerWidth:width,outerHeight:height,padding,availableWidth,availableHeight,vBoxMaxWidth:availableWidth/2/visibleVerticalBoxCount,hBoxMaxHeight:availableHeight/2});const maxPadding=Object.assign({},padding);updateMaxPadding(maxPadding,toPadding(minPadding));const chartArea=Object.assign({maxPadding,w:availableWidth,h:availableHeight,x:padding.left,y:padding.top},padding);const stacks=setLayoutDims(verticalBoxes.concat(horizontalBoxes),params);fitBoxes(boxes.fullSize,chartArea,params,stacks);fitBoxes(verticalBoxes,chartArea,params,stacks);if(fitBoxes(horizontalBoxes,chartArea,params,stacks)){fitBoxes(verticalBoxes,chartArea,params,stacks);} -handleMaxPadding(chartArea);placeBoxes(boxes.leftAndTop,chartArea,params,stacks);chartArea.x+=chartArea.w;chartArea.y+=chartArea.h;placeBoxes(boxes.rightAndBottom,chartArea,params,stacks);chart.chartArea={left:chartArea.left,top:chartArea.top,right:chartArea.left+chartArea.w,bottom:chartArea.top+chartArea.h,height:chartArea.h,width:chartArea.w,};each(boxes.chartArea,(layout)=>{const box=layout.box;Object.assign(box,chart.chartArea);box.update(chartArea.w,chartArea.h,{left:0,top:0,right:0,bottom:0});});}};class BasePlatform{acquireContext(canvas,aspectRatio){} -releaseContext(context){return false;} -addEventListener(chart,type,listener){} -removeEventListener(chart,type,listener){} -getDevicePixelRatio(){return 1;} -getMaximumSize(element,width,height,aspectRatio){width=Math.max(0,width||element.width);height=height||element.height;return{width,height:Math.max(0,aspectRatio?Math.floor(width/aspectRatio):height)};} -isAttached(canvas){return true;} -updateConfig(config){}} -class BasicPlatform extends BasePlatform{acquireContext(item){return item&&item.getContext&&item.getContext('2d')||null;} -updateConfig(config){config.options.animation=false;}} -const EXPANDO_KEY='$chartjs';const EVENT_TYPES={touchstart:'mousedown',touchmove:'mousemove',touchend:'mouseup',pointerenter:'mouseenter',pointerdown:'mousedown',pointermove:'mousemove',pointerup:'mouseup',pointerleave:'mouseout',pointerout:'mouseout'};const isNullOrEmpty=value=>value===null||value==='';function initCanvas(canvas,aspectRatio){const style=canvas.style;const renderHeight=canvas.getAttribute('height');const renderWidth=canvas.getAttribute('width');canvas[EXPANDO_KEY]={initial:{height:renderHeight,width:renderWidth,style:{display:style.display,height:style.height,width:style.width}}};style.display=style.display||'block';style.boxSizing=style.boxSizing||'border-box';if(isNullOrEmpty(renderWidth)){const displayWidth=readUsedSize(canvas,'width');if(displayWidth!==undefined){canvas.width=displayWidth;}} -if(isNullOrEmpty(renderHeight)){if(canvas.style.height===''){canvas.height=canvas.width/(aspectRatio||2);}else{const displayHeight=readUsedSize(canvas,'height');if(displayHeight!==undefined){canvas.height=displayHeight;}}} -return canvas;} -const eventListenerOptions=supportsEventListenerOptions?{passive:true}:false;function addListener(node,type,listener){node.addEventListener(type,listener,eventListenerOptions);} -function removeListener(chart,type,listener){chart.canvas.removeEventListener(type,listener,eventListenerOptions);} -function fromNativeEvent(event,chart){const type=EVENT_TYPES[event.type]||event.type;const{x,y}=getRelativePosition(event,chart);return{type,chart,native:event,x:x!==undefined?x:null,y:y!==undefined?y:null,};} -function nodeListContains(nodeList,canvas){for(const node of nodeList){if(node===canvas||node.contains(canvas)){return true;}}} -function createAttachObserver(chart,type,listener){const canvas=chart.canvas;const observer=new MutationObserver(entries=>{let trigger=false;for(const entry of entries){trigger=trigger||nodeListContains(entry.addedNodes,canvas);trigger=trigger&&!nodeListContains(entry.removedNodes,canvas);} -if(trigger){listener();}});observer.observe(document,{childList:true,subtree:true});return observer;} -function createDetachObserver(chart,type,listener){const canvas=chart.canvas;const observer=new MutationObserver(entries=>{let trigger=false;for(const entry of entries){trigger=trigger||nodeListContains(entry.removedNodes,canvas);trigger=trigger&&!nodeListContains(entry.addedNodes,canvas);} -if(trigger){listener();}});observer.observe(document,{childList:true,subtree:true});return observer;} -const drpListeningCharts=new Map();let oldDevicePixelRatio=0;function onWindowResize(){const dpr=window.devicePixelRatio;if(dpr===oldDevicePixelRatio){return;} -oldDevicePixelRatio=dpr;drpListeningCharts.forEach((resize,chart)=>{if(chart.currentDevicePixelRatio!==dpr){resize();}});} -function listenDevicePixelRatioChanges(chart,resize){if(!drpListeningCharts.size){window.addEventListener('resize',onWindowResize);} -drpListeningCharts.set(chart,resize);} -function unlistenDevicePixelRatioChanges(chart){drpListeningCharts.delete(chart);if(!drpListeningCharts.size){window.removeEventListener('resize',onWindowResize);}} -function createResizeObserver(chart,type,listener){const canvas=chart.canvas;const container=canvas&&_getParentNode(canvas);if(!container){return;} -const resize=throttled((width,height)=>{const w=container.clientWidth;listener(width,height);if(w{const entry=entries[0];const width=entry.contentRect.width;const height=entry.contentRect.height;if(width===0&&height===0){return;} -resize(width,height);});observer.observe(container);listenDevicePixelRatioChanges(chart,resize);return observer;} -function releaseObserver(chart,type,observer){if(observer){observer.disconnect();} -if(type==='resize'){unlistenDevicePixelRatioChanges(chart);}} -function createProxyAndListen(chart,type,listener){const canvas=chart.canvas;const proxy=throttled((event)=>{if(chart.ctx!==null){listener(fromNativeEvent(event,chart));}},chart,(args)=>{const event=args[0];return[event,event.offsetX,event.offsetY];});addListener(canvas,type,proxy);return proxy;} -class DomPlatform extends BasePlatform{acquireContext(canvas,aspectRatio){const context=canvas&&canvas.getContext&&canvas.getContext('2d');if(context&&context.canvas===canvas){initCanvas(canvas,aspectRatio);return context;} -return null;} -releaseContext(context){const canvas=context.canvas;if(!canvas[EXPANDO_KEY]){return false;} -const initial=canvas[EXPANDO_KEY].initial;['height','width'].forEach((prop)=>{const value=initial[prop];if(isNullOrUndef(value)){canvas.removeAttribute(prop);}else{canvas.setAttribute(prop,value);}});const style=initial.style||{};Object.keys(style).forEach((key)=>{canvas.style[key]=style[key];});canvas.width=canvas.width;delete canvas[EXPANDO_KEY];return true;} -addEventListener(chart,type,listener){this.removeEventListener(chart,type);const proxies=chart.$proxies||(chart.$proxies={});const handlers={attach:createAttachObserver,detach:createDetachObserver,resize:createResizeObserver};const handler=handlers[type]||createProxyAndListen;proxies[type]=handler(chart,type,listener);} -removeEventListener(chart,type){const proxies=chart.$proxies||(chart.$proxies={});const proxy=proxies[type];if(!proxy){return;} -const handlers={attach:releaseObserver,detach:releaseObserver,resize:releaseObserver};const handler=handlers[type]||removeListener;handler(chart,type,proxy);proxies[type]=undefined;} -getDevicePixelRatio(){return window.devicePixelRatio;} -getMaximumSize(canvas,width,height,aspectRatio){return getMaximumSize(canvas,width,height,aspectRatio);} -isAttached(canvas){const container=_getParentNode(canvas);return!!(container&&container.isConnected);}} -function _detectPlatform(canvas){if(!_isDomSupported()||(typeof OffscreenCanvas!=='undefined'&&canvas instanceof OffscreenCanvas)){return BasicPlatform;} -return DomPlatform;} -var platforms=Object.freeze({__proto__:null,_detectPlatform:_detectPlatform,BasePlatform:BasePlatform,BasicPlatform:BasicPlatform,DomPlatform:DomPlatform});const transparent='transparent';const interpolators={boolean(from,to,factor){return factor>0.5?to:from;},color(from,to,factor){const c0=color(from||transparent);const c1=c0.valid&&color(to||transparent);return c1&&c1.valid?c1.mix(c0,factor).hexString():to;},number(from,to,factor){return from+(to-from)*factor;}};class Animation{constructor(cfg,target,prop,to){const currentValue=target[prop];to=resolve([cfg.to,to,currentValue,cfg.from]);const from=resolve([cfg.from,currentValue,to]);this._active=true;this._fn=cfg.fn||interpolators[cfg.type||typeof from];this._easing=effects[cfg.easing]||effects.linear;this._start=Math.floor(Date.now()+(cfg.delay||0));this._duration=this._total=Math.floor(cfg.duration);this._loop=!!cfg.loop;this._target=target;this._prop=prop;this._from=from;this._to=to;this._promises=undefined;} -active(){return this._active;} -update(cfg,to,date){if(this._active){this._notify(false);const currentValue=this._target[this._prop];const elapsed=date-this._start;const remain=this._duration-elapsed;this._start=date;this._duration=Math.floor(Math.max(remain,cfg.duration));this._total+=elapsed;this._loop=!!cfg.loop;this._to=resolve([cfg.to,to,currentValue,cfg.from]);this._from=resolve([cfg.from,currentValue,to]);}} -cancel(){if(this._active){this.tick(Date.now());this._active=false;this._notify(false);}} -tick(date){const elapsed=date-this._start;const duration=this._duration;const prop=this._prop;const from=this._from;const loop=this._loop;const to=this._to;let factor;this._active=from!==to&&(loop||(elapsed1?2-factor:factor;factor=this._easing(Math.min(1,Math.max(0,factor)));this._target[prop]=this._fn(from,to,factor);} -wait(){const promises=this._promises||(this._promises=[]);return new Promise((res,rej)=>{promises.push({res,rej});});} -_notify(resolved){const method=resolved?'res':'rej';const promises=this._promises||[];for(let i=0;iname!=='onProgress'&&name!=='onComplete'&&name!=='fn',});defaults.set('animations',{colors:{type:'color',properties:colors},numbers:{type:'number',properties:numbers},});defaults.describe('animations',{_fallback:'animation',});defaults.set('transitions',{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:'transparent'},visible:{type:'boolean',duration:0},}},hide:{animations:{colors:{to:'transparent'},visible:{type:'boolean',easing:'linear',fn:v=>v|0},}}});class Animations{constructor(chart,config){this._chart=chart;this._properties=new Map();this.configure(config);} -configure(config){if(!isObject(config)){return;} -const animatedProps=this._properties;Object.getOwnPropertyNames(config).forEach(key=>{const cfg=config[key];if(!isObject(cfg)){return;} -const resolved={};for(const option of animationOptions){resolved[option]=cfg[option];} -(isArray(cfg.properties)&&cfg.properties||[key]).forEach((prop)=>{if(prop===key||!animatedProps.has(prop)){animatedProps.set(prop,resolved);}});});} -_animateOptions(target,values){const newOptions=values.options;const options=resolveTargetOptions(target,newOptions);if(!options){return[];} -const animations=this._createAnimations(options,newOptions);if(newOptions.$shared){awaitAll(target.options.$animations,newOptions).then(()=>{target.options=newOptions;},()=>{});} -return animations;} -_createAnimations(target,values){const animatedProps=this._properties;const animations=[];const running=target.$animations||(target.$animations={});const props=Object.keys(values);const date=Date.now();let i;for(i=props.length-1;i>=0;--i){const prop=props[i];if(prop.charAt(0)==='$'){continue;} -if(prop==='options'){animations.push(...this._animateOptions(target,values));continue;} -const value=values[prop];let animation=running[prop];const cfg=animatedProps.get(prop);if(animation){if(cfg&&animation.active()){animation.update(cfg,value,date);continue;}else{animation.cancel();}} -if(!cfg||!cfg.duration){target[prop]=value;continue;} -running[prop]=animation=new Animation(cfg,target,prop,value);animations.push(animation);} -return animations;} -update(target,values){if(this._properties.size===0){Object.assign(target,values);return;} -const animations=this._createAnimations(target,values);if(animations.length){animator.add(this._chart,animations);return true;}}} -function awaitAll(animations,properties){const running=[];const keys=Object.keys(properties);for(let i=0;i0)||(!positive&&value<0)){return meta.index;}} -return null;} -function updateStacks(controller,parsed){const{chart,_cachedMeta:meta}=controller;const stacks=chart._stacks||(chart._stacks={});const{iScale,vScale,index:datasetIndex}=meta;const iAxis=iScale.axis;const vAxis=vScale.axis;const key=getStackKey(iScale,vScale,meta);const ilen=parsed.length;let stack;for(let i=0;iscales[key].axis===axis).shift();} -function createDatasetContext(parent,index){return createContext(parent,{active:false,dataset:undefined,datasetIndex:index,index,mode:'default',type:'dataset'});} -function createDataContext(parent,index,element){return createContext(parent,{active:false,dataIndex:index,parsed:undefined,raw:undefined,element,index,mode:'default',type:'data'});} -function clearStacks(meta,items){const datasetIndex=meta.controller.index;const axis=meta.vScale&&meta.vScale.axis;if(!axis){return;} -items=items||meta._parsed;for(const parsed of items){const stacks=parsed._stacks;if(!stacks||stacks[axis]===undefined||stacks[axis][datasetIndex]===undefined){return;} -delete stacks[axis][datasetIndex];}} -const isDirectUpdateMode=(mode)=>mode==='reset'||mode==='none';const cloneIfNotShared=(cached,shared)=>shared?cached:Object.assign({},cached);const createStack=(canStack,meta,chart)=>canStack&&!meta.hidden&&meta._stacked&&{keys:getSortedDatasetIndices(chart,true),values:null};class DatasetController{constructor(chart,datasetIndex){this.chart=chart;this._ctx=chart.ctx;this.index=datasetIndex;this._cachedDataOpts={};this._cachedMeta=this.getMeta();this._type=this._cachedMeta.type;this.options=undefined;this._parsing=false;this._data=undefined;this._objectData=undefined;this._sharedOptions=undefined;this._drawStart=undefined;this._drawCount=undefined;this.enableOptionSharing=false;this.supportsDecimation=false;this.$context=undefined;this._syncList=[];this.initialize();} -initialize(){const meta=this._cachedMeta;this.configure();this.linkScales();meta._stacked=isStacked(meta.vScale,meta);this.addElements();} -updateIndex(datasetIndex){if(this.index!==datasetIndex){clearStacks(this._cachedMeta);} -this.index=datasetIndex;} -linkScales(){const chart=this.chart;const meta=this._cachedMeta;const dataset=this.getDataset();const chooseId=(axis,x,y,r)=>axis==='x'?x:axis==='r'?r:y;const xid=meta.xAxisID=valueOrDefault(dataset.xAxisID,getFirstScaleId(chart,'x'));const yid=meta.yAxisID=valueOrDefault(dataset.yAxisID,getFirstScaleId(chart,'y'));const rid=meta.rAxisID=valueOrDefault(dataset.rAxisID,getFirstScaleId(chart,'r'));const indexAxis=meta.indexAxis;const iid=meta.iAxisID=chooseId(indexAxis,xid,yid,rid);const vid=meta.vAxisID=chooseId(indexAxis,yid,xid,rid);meta.xScale=this.getScaleForId(xid);meta.yScale=this.getScaleForId(yid);meta.rScale=this.getScaleForId(rid);meta.iScale=this.getScaleForId(iid);meta.vScale=this.getScaleForId(vid);} -getDataset(){return this.chart.data.datasets[this.index];} -getMeta(){return this.chart.getDatasetMeta(this.index);} -getScaleForId(scaleID){return this.chart.scales[scaleID];} -_getOtherScale(scale){const meta=this._cachedMeta;return scale===meta.iScale?meta.vScale:meta.iScale;} -reset(){this._update('reset');} -_destroy(){const meta=this._cachedMeta;if(this._data){unlistenArrayEvents(this._data,this);} -if(meta._stacked){clearStacks(meta);}} -_dataCheck(){const dataset=this.getDataset();const data=dataset.data||(dataset.data=[]);const _data=this._data;if(isObject(data)){this._data=convertObjectDataToArray(data);}else if(_data!==data){if(_data){unlistenArrayEvents(_data,this);const meta=this._cachedMeta;clearStacks(meta);meta._parsed=[];} -if(data&&Object.isExtensible(data)){listenArrayEvents(data,this);} -this._syncList=[];this._data=data;}} -addElements(){const meta=this._cachedMeta;this._dataCheck();if(this.datasetElementType){meta.dataset=new this.datasetElementType();}} -buildOrUpdateElements(resetNewElements){const meta=this._cachedMeta;const dataset=this.getDataset();let stackChanged=false;this._dataCheck();const oldStacked=meta._stacked;meta._stacked=isStacked(meta.vScale,meta);if(meta.stack!==dataset.stack){stackChanged=true;clearStacks(meta);meta.stack=dataset.stack;} -this._resyncElements(resetNewElements);if(stackChanged||oldStacked!==meta._stacked){updateStacks(this,meta._parsed);}} -configure(){const config=this.chart.config;const scopeKeys=config.datasetScopeKeys(this._type);const scopes=config.getOptionScopes(this.getDataset(),scopeKeys,true);this.options=config.createResolver(scopes,this.getContext());this._parsing=this.options.parsing;this._cachedDataOpts={};} -parse(start,count){const{_cachedMeta:meta,_data:data}=this;const{iScale,_stacked}=meta;const iAxis=iScale.axis;let sorted=start===0&&count===data.length?true:meta._sorted;let prev=start>0&&meta._parsed[start-1];let i,cur,parsed;if(this._parsing===false){meta._parsed=data;meta._sorted=true;parsed=data;}else{if(isArray(data[start])){parsed=this.parseArrayData(meta,data,start,count);}else if(isObject(data[start])){parsed=this.parseObjectData(meta,data,start,count);}else{parsed=this.parsePrimitiveData(meta,data,start,count);} -const isNotInOrderComparedToPrev=()=>cur[iAxis]===null||(prev&&cur[iAxis]otherValue||otherMax=0;--i){if(_skip()){continue;} -this.updateRangeFromParsed(range,scale,parsed,stack);break;}} -return range;} -getAllParsedValues(scale){const parsed=this._cachedMeta._parsed;const values=[];let i,ilen,value;for(i=0,ilen=parsed.length;i=0&&indexthis.getContext(index,active);const values=config.resolveNamedOptions(scopes,names,context,prefixes);if(values.$shared){values.$shared=sharing;cache[cacheKey]=Object.freeze(cloneIfNotShared(values,sharing));} -return values;} -_resolveAnimations(index,transition,active){const chart=this.chart;const cache=this._cachedDataOpts;const cacheKey=`animation-${transition}`;const cached=cache[cacheKey];if(cached){return cached;} -let options;if(chart.options.animation!==false){const config=this.chart.config;const scopeKeys=config.datasetAnimationScopeKeys(this._type,transition);const scopes=config.getOptionScopes(this.getDataset(),scopeKeys);options=config.createResolver(scopes,this.getContext(index,active,transition));} -const animations=new Animations(chart,options&&options.animations);if(options&&options._cacheable){cache[cacheKey]=Object.freeze(animations);} -return animations;} -getSharedOptions(options){if(!options.$shared){return;} -return this._sharedOptions||(this._sharedOptions=Object.assign({},options));} -includeOptions(mode,sharedOptions){return!sharedOptions||isDirectUpdateMode(mode)||this.chart._animationsDisabled;} -_getSharedOptions(start,mode){const firstOpts=this.resolveDataElementOptions(start,mode);const previouslySharedOptions=this._sharedOptions;const sharedOptions=this.getSharedOptions(firstOpts);const includeOptions=this.includeOptions(mode,sharedOptions)||(sharedOptions!==previouslySharedOptions);this.updateSharedOptions(sharedOptions,mode,firstOpts);return{sharedOptions,includeOptions};} -updateElement(element,index,properties,mode){if(isDirectUpdateMode(mode)){Object.assign(element,properties);}else{this._resolveAnimations(index,mode).update(element,properties);}} -updateSharedOptions(sharedOptions,mode,newOptions){if(sharedOptions&&!isDirectUpdateMode(mode)){this._resolveAnimations(undefined,mode).update(sharedOptions,newOptions);}} -_setStyle(element,index,mode,active){element.active=active;const options=this.getStyle(index,active);this._resolveAnimations(index,mode,active).update(element,{options:(!active&&this.getSharedOptions(options))||options});} -removeHoverStyle(element,datasetIndex,index){this._setStyle(element,index,'active',false);} -setHoverStyle(element,datasetIndex,index){this._setStyle(element,index,'active',true);} -_removeDatasetHoverStyle(){const element=this._cachedMeta.dataset;if(element){this._setStyle(element,undefined,'active',false);}} -_setDatasetHoverStyle(){const element=this._cachedMeta.dataset;if(element){this._setStyle(element,undefined,'active',true);}} -_resyncElements(resetNewElements){const data=this._data;const elements=this._cachedMeta.data;for(const[method,arg1,arg2]of this._syncList){this[method](arg1,arg2);} -this._syncList=[];const numMeta=elements.length;const numData=data.length;const count=Math.min(numData,numMeta);if(count){this.parse(0,count);} -if(numData>numMeta){this._insertElements(numMeta,numData-numMeta,resetNewElements);}else if(numData{arr.length+=count;for(i=arr.length-1;i>=end;i--){arr[i]=arr[i-count];}};move(data);for(i=start;i{ret[prop]=anims[prop]&&anims[prop].active()?anims[prop]._to:this[prop];});return ret;}} -Element.defaults={};Element.defaultRoutes=undefined;const formatters={values(value){return isArray(value)?value:''+value;},numeric(tickValue,index,ticks){if(tickValue===0){return'0';} -const locale=this.chart.options.locale;let notation;let delta=tickValue;if(ticks.length>1){const maxTick=Math.max(Math.abs(ticks[0].value),Math.abs(ticks[ticks.length-1].value));if(maxTick<1e-4||maxTick>1e+15){notation='scientific';} -delta=calculateDelta(tickValue,ticks);} -const logDelta=log10(Math.abs(delta));const numDecimal=Math.max(Math.min(-1*Math.floor(logDelta),20),0);const options={notation,minimumFractionDigits:numDecimal,maximumFractionDigits:numDecimal};Object.assign(options,this.options.ticks.format);return formatNumber(tickValue,locale,options);},logarithmic(tickValue,index,ticks){if(tickValue===0){return'0';} -const remain=tickValue/(Math.pow(10,Math.floor(log10(tickValue))));if(remain===1||remain===2||remain===5){return formatters.numeric.call(this,tickValue,index,ticks);} -return'';}};function calculateDelta(tickValue,ticks){let delta=ticks.length>3?ticks[2].value-ticks[1].value:ticks[1].value-ticks[0].value;if(Math.abs(delta)>=1&&tickValue!==Math.floor(tickValue)){delta=tickValue-Math.floor(tickValue);} -return delta;} -var Ticks={formatters};defaults.set('scale',{display:true,offset:false,reverse:false,beginAtZero:false,bounds:'ticks',grace:0,grid:{display:true,lineWidth:1,drawBorder:true,drawOnChartArea:true,drawTicks:true,tickLength:8,tickWidth:(_ctx,options)=>options.lineWidth,tickColor:(_ctx,options)=>options.color,offset:false,borderDash:[],borderDashOffset:0.0,borderWidth:1},title:{display:false,text:'',padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:false,textStrokeWidth:0,textStrokeColor:'',padding:3,display:true,autoSkip:true,autoSkipPadding:3,labelOffset:0,callback:Ticks.formatters.values,minor:{},major:{},align:'center',crossAlign:'near',showLabelBackdrop:false,backdropColor:'rgba(255, 255, 255, 0.75)',backdropPadding:2,}});defaults.route('scale.ticks','color','','color');defaults.route('scale.grid','color','','borderColor');defaults.route('scale.grid','borderColor','','borderColor');defaults.route('scale.title','color','','color');defaults.describe('scale',{_fallback:false,_scriptable:(name)=>!name.startsWith('before')&&!name.startsWith('after')&&name!=='callback'&&name!=='parser',_indexable:(name)=>name!=='borderDash'&&name!=='tickBorderDash',});defaults.describe('scales',{_fallback:'scale',});defaults.describe('scale.ticks',{_scriptable:(name)=>name!=='backdropPadding'&&name!=='callback',_indexable:(name)=>name!=='backdropPadding',});function autoSkip(scale,ticks){const tickOpts=scale.options.ticks;const ticksLimit=tickOpts.maxTicksLimit||determineMaxTicks(scale);const majorIndices=tickOpts.major.enabled?getMajorIndices(ticks):[];const numMajorIndices=majorIndices.length;const first=majorIndices[0];const last=majorIndices[numMajorIndices-1];const newTicks=[];if(numMajorIndices>ticksLimit){skipMajors(ticks,newTicks,majorIndices,numMajorIndices/ticksLimit);return newTicks;} -const spacing=calculateSpacing(majorIndices,ticks,ticksLimit);if(numMajorIndices>0){let i,ilen;const avgMajorSpacing=numMajorIndices>1?Math.round((last-first)/(numMajorIndices-1)):null;skip(ticks,newTicks,spacing,isNullOrUndef(avgMajorSpacing)?0:first-avgMajorSpacing,first);for(i=0,ilen=numMajorIndices-1;ispacing){return factor;}} -return Math.max(spacing,1);} -function getMajorIndices(ticks){const result=[];let i,ilen;for(i=0,ilen=ticks.length;ialign==='left'?'right':align==='right'?'left':align;const offsetFromEdge=(scale,edge,offset)=>edge==='top'||edge==='left'?scale[edge]+offset:scale[edge]-offset;function sample(arr,numItems){const result=[];const increment=arr.length/numItems;const len=arr.length;let i=0;for(;iend+epsilon){return;}} -return lineValue;} -function garbageCollect(caches,length){each(caches,(cache)=>{const gc=cache.gc;const gcLen=gc.length/2;let i;if(gcLen>length){for(i=0;imax?max:min;max=minDefined&&min>max?min:max;return{min:finiteOrDefault(min,finiteOrDefault(max,min)),max:finiteOrDefault(max,finiteOrDefault(min,max))};} -getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0};} -getTicks(){return this.ticks;} -getLabels(){const data=this.chart.data;return this.options.labels||(this.isHorizontal()?data.xLabels:data.yLabels)||data.labels||[];} -beforeLayout(){this._cache={};this._dataLimitsCached=false;} -beforeUpdate(){callback(this.options.beforeUpdate,[this]);} -update(maxWidth,maxHeight,margins){const{beginAtZero,grace,ticks:tickOpts}=this.options;const sampleSize=tickOpts.sampleSize;this.beforeUpdate();this.maxWidth=maxWidth;this.maxHeight=maxHeight;this._margins=margins=Object.assign({left:0,right:0,top:0,bottom:0},margins);this.ticks=null;this._labelSizes=null;this._gridLineItems=null;this._labelItems=null;this.beforeSetDimensions();this.setDimensions();this.afterSetDimensions();this._maxLength=this.isHorizontal()?this.width+margins.left+margins.right:this.height+margins.top+margins.bottom;if(!this._dataLimitsCached){this.beforeDataLimits();this.determineDataLimits();this.afterDataLimits();this._range=_addGrace(this,grace,beginAtZero);this._dataLimitsCached=true;} -this.beforeBuildTicks();this.ticks=this.buildTicks()||[];this.afterBuildTicks();const samplingEnabled=sampleSize=maxRotation||numTicks<=1||!this.isHorizontal()){this.labelRotation=minRotation;return;} -const labelSizes=this._getLabelSizes();const maxLabelWidth=labelSizes.widest.width;const maxLabelHeight=labelSizes.highest.height;const maxWidth=_limitValue(this.chart.width-maxLabelWidth,0,this.maxWidth);tickWidth=options.offset?this.maxWidth/numTicks:maxWidth/(numTicks-1);if(maxLabelWidth+6>tickWidth){tickWidth=maxWidth/(numTicks-(options.offset?0.5:1));maxHeight=this.maxHeight-getTickMarkLength(options.grid) --tickOpts.padding-getTitleHeight(options.title,this.chart.options.font);maxLabelDiagonal=Math.sqrt(maxLabelWidth*maxLabelWidth+maxLabelHeight*maxLabelHeight);labelRotation=toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height+6)/tickWidth,-1,1)),Math.asin(_limitValue(maxHeight/maxLabelDiagonal,-1,1))-Math.asin(_limitValue(maxLabelHeight/maxLabelDiagonal,-1,1))));labelRotation=Math.max(minRotation,Math.min(maxRotation,labelRotation));} -this.labelRotation=labelRotation;} -afterCalculateLabelRotation(){callback(this.options.afterCalculateLabelRotation,[this]);} -afterAutoSkip(){} -beforeFit(){callback(this.options.beforeFit,[this]);} -fit(){const minSize={width:0,height:0};const{chart,options:{ticks:tickOpts,title:titleOpts,grid:gridOpts}}=this;const display=this._isVisible();const isHorizontal=this.isHorizontal();if(display){const titleHeight=getTitleHeight(titleOpts,chart.options.font);if(isHorizontal){minSize.width=this.maxWidth;minSize.height=getTickMarkLength(gridOpts)+titleHeight;}else{minSize.height=this.maxHeight;minSize.width=getTickMarkLength(gridOpts)+titleHeight;} -if(tickOpts.display&&this.ticks.length){const{first,last,widest,highest}=this._getLabelSizes();const tickPadding=tickOpts.padding*2;const angleRadians=toRadians(this.labelRotation);const cos=Math.cos(angleRadians);const sin=Math.sin(angleRadians);if(isHorizontal){const labelHeight=tickOpts.mirror?0:sin*widest.width+cos*highest.height;minSize.height=Math.min(this.maxHeight,minSize.height+labelHeight+tickPadding);}else{const labelWidth=tickOpts.mirror?0:cos*widest.width+sin*highest.height;minSize.width=Math.min(this.maxWidth,minSize.width+labelWidth+tickPadding);} -this._calculatePadding(first,last,sin,cos);}} -this._handleMargins();if(isHorizontal){this.width=this._length=chart.width-this._margins.left-this._margins.right;this.height=minSize.height;}else{this.width=minSize.width;this.height=this._length=chart.height-this._margins.top-this._margins.bottom;}} -_calculatePadding(first,last,sin,cos){const{ticks:{align,padding},position}=this.options;const isRotated=this.labelRotation!==0;const labelsBelowTicks=position!=='top'&&this.axis==='x';if(this.isHorizontal()){const offsetLeft=this.getPixelForTick(0)-this.left;const offsetRight=this.right-this.getPixelForTick(this.ticks.length-1);let paddingLeft=0;let paddingRight=0;if(isRotated){if(labelsBelowTicks){paddingLeft=cos*first.width;paddingRight=sin*last.height;}else{paddingLeft=sin*first.height;paddingRight=cos*last.width;}}else if(align==='start'){paddingRight=last.width;}else if(align==='end'){paddingLeft=first.width;}else if(align!=='inner'){paddingLeft=first.width/2;paddingRight=last.width/2;} -this.paddingLeft=Math.max((paddingLeft-offsetLeft+padding)*this.width/(this.width-offsetLeft),0);this.paddingRight=Math.max((paddingRight-offsetRight+padding)*this.width/(this.width-offsetRight),0);}else{let paddingTop=last.height/2;let paddingBottom=first.height/2;if(align==='start'){paddingTop=0;paddingBottom=first.height;}else if(align==='end'){paddingTop=last.height;paddingBottom=0;} -this.paddingTop=paddingTop+padding;this.paddingBottom=paddingBottom+padding;}} -_handleMargins(){if(this._margins){this._margins.left=Math.max(this.paddingLeft,this._margins.left);this._margins.top=Math.max(this.paddingTop,this._margins.top);this._margins.right=Math.max(this.paddingRight,this._margins.right);this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom);}} -afterFit(){callback(this.options.afterFit,[this]);} -isHorizontal(){const{axis,position}=this.options;return position==='top'||position==='bottom'||axis==='x';} -isFullSize(){return this.options.fullSize;} -_convertTicksToLabels(ticks){this.beforeTickToLabelConversion();this.generateTickLabels(ticks);let i,ilen;for(i=0,ilen=ticks.length;i({width:widths[idx]||0,height:heights[idx]||0});return{first:valueAt(0),last:valueAt(length-1),widest:valueAt(widest),highest:valueAt(highest),widths,heights,};} -getLabelForValue(value){return value;} -getPixelForValue(value,index){return NaN;} -getValueForPixel(pixel){} -getPixelForTick(index){const ticks=this.ticks;if(index<0||index>ticks.length-1){return null;} -return this.getPixelForValue(ticks[index].value);} -getPixelForDecimal(decimal){if(this._reversePixels){decimal=1-decimal;} -const pixel=this._startPixel+decimal*this._length;return _int16Range(this._alignToPixels?_alignPixel(this.chart,pixel,0):pixel);} -getDecimalForPixel(pixel){const decimal=(pixel-this._startPixel)/this._length;return this._reversePixels?1-decimal:decimal;} -getBasePixel(){return this.getPixelForValue(this.getBaseValue());} -getBaseValue(){const{min,max}=this;return min<0&&max<0?max:min>0&&max>0?min:0;} -getContext(index){const ticks=this.ticks||[];if(index>=0&&indexw*sin?w/cos:h/sin:h*sin0;} -_computeGridLineItems(chartArea){const axis=this.axis;const chart=this.chart;const options=this.options;const{grid,position}=options;const offset=grid.offset;const isHorizontal=this.isHorizontal();const ticks=this.ticks;const ticksLength=ticks.length+(offset?1:0);const tl=getTickMarkLength(grid);const items=[];const borderOpts=grid.setContext(this.getContext());const axisWidth=borderOpts.drawBorder?borderOpts.borderWidth:0;const axisHalfWidth=axisWidth/2;const alignBorderValue=function(pixel){return _alignPixel(chart,pixel,axisWidth);};let borderValue,i,lineValue,alignedLineValue;let tx1,ty1,tx2,ty2,x1,y1,x2,y2;if(position==='top'){borderValue=alignBorderValue(this.bottom);ty1=this.bottom-tl;ty2=borderValue-axisHalfWidth;y1=alignBorderValue(chartArea.top)+axisHalfWidth;y2=chartArea.bottom;}else if(position==='bottom'){borderValue=alignBorderValue(this.top);y1=chartArea.top;y2=alignBorderValue(chartArea.bottom)-axisHalfWidth;ty1=borderValue+axisHalfWidth;ty2=this.top+tl;}else if(position==='left'){borderValue=alignBorderValue(this.right);tx1=this.right-tl;tx2=borderValue-axisHalfWidth;x1=alignBorderValue(chartArea.left)+axisHalfWidth;x2=chartArea.right;}else if(position==='right'){borderValue=alignBorderValue(this.left);x1=chartArea.left;x2=alignBorderValue(chartArea.right)-axisHalfWidth;tx1=borderValue+axisHalfWidth;tx2=this.left+tl;}else if(axis==='x'){if(position==='center'){borderValue=alignBorderValue((chartArea.top+chartArea.bottom)/2+0.5);}else if(isObject(position)){const positionAxisID=Object.keys(position)[0];const value=position[positionAxisID];borderValue=alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));} -y1=chartArea.top;y2=chartArea.bottom;ty1=borderValue+axisHalfWidth;ty2=ty1+tl;}else if(axis==='y'){if(position==='center'){borderValue=alignBorderValue((chartArea.left+chartArea.right)/2);}else if(isObject(position)){const positionAxisID=Object.keys(position)[0];const value=position[positionAxisID];borderValue=alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));} -tx1=borderValue-axisHalfWidth;tx2=tx1-tl;x1=chartArea.left;x2=chartArea.right;} -const limit=valueOrDefault(options.ticks.maxTicksLimit,ticksLength);const step=Math.max(1,Math.ceil(ticksLength/limit));for(i=0;it.value===value);if(index>=0){const opts=grid.setContext(this.getContext(index));return opts.lineWidth;} -return 0;} -drawGrid(chartArea){const grid=this.options.grid;const ctx=this.ctx;const items=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(chartArea));let i,ilen;const drawLine=(p1,p2,style)=>{if(!style.width||!style.color){return;} -ctx.save();ctx.lineWidth=style.width;ctx.strokeStyle=style.color;ctx.setLineDash(style.borderDash||[]);ctx.lineDashOffset=style.borderDashOffset;ctx.beginPath();ctx.moveTo(p1.x,p1.y);ctx.lineTo(p2.x,p2.y);ctx.stroke();ctx.restore();};if(grid.display){for(i=0,ilen=items.length;i{this.draw(chartArea);}}];} -return[{z:gz,draw:(chartArea)=>{this.drawBackground();this.drawGrid(chartArea);this.drawTitle();}},{z:gz+1,draw:()=>{this.drawBorder();}},{z:tz,draw:(chartArea)=>{this.drawLabels(chartArea);}}];} -getMatchingVisibleMetas(type){const metas=this.chart.getSortedVisibleDatasetMetas();const axisID=this.axis+'AxisID';const result=[];let i,ilen;for(i=0,ilen=metas.length;i{const propertyParts=property.split('.');const sourceName=propertyParts.pop();const sourceScope=[scope].concat(propertyParts).join('.');const parts=routes[property].split('.');const targetName=parts.pop();const targetScope=parts.join('.');defaults.route(sourceScope,sourceName,targetScope,targetName);});} -function isIChartComponent(proto){return'id'in proto&&'defaults'in proto;} -class Registry{constructor(){this.controllers=new TypedRegistry(DatasetController,'datasets',true);this.elements=new TypedRegistry(Element,'elements');this.plugins=new TypedRegistry(Object,'plugins');this.scales=new TypedRegistry(Scale,'scales');this._typedRegistries=[this.controllers,this.scales,this.elements];} -add(...args){this._each('register',args);} -remove(...args){this._each('unregister',args);} -addControllers(...args){this._each('register',args,this.controllers);} -addElements(...args){this._each('register',args,this.elements);} -addPlugins(...args){this._each('register',args,this.plugins);} -addScales(...args){this._each('register',args,this.scales);} -getController(id){return this._get(id,this.controllers,'controller');} -getElement(id){return this._get(id,this.elements,'element');} -getPlugin(id){return this._get(id,this.plugins,'plugin');} -getScale(id){return this._get(id,this.scales,'scale');} -removeControllers(...args){this._each('unregister',args,this.controllers);} -removeElements(...args){this._each('unregister',args,this.elements);} -removePlugins(...args){this._each('unregister',args,this.plugins);} -removeScales(...args){this._each('unregister',args,this.scales);} -_each(method,args,typedRegistry){[...args].forEach(arg=>{const reg=typedRegistry||this._getRegistryForType(arg);if(typedRegistry||reg.isForType(arg)||(reg===this.plugins&&arg.id)){this._exec(method,reg,arg);}else{each(arg,item=>{const itemReg=typedRegistry||this._getRegistryForType(item);this._exec(method,itemReg,item);});}});} -_exec(method,registry,component){const camelMethod=_capitalize(method);callback(component['before'+camelMethod],[],component);registry[method](component);callback(component['after'+camelMethod],[],component);} -_getRegistryForType(type){for(let i=0;ia.filter(x=>!b.some(y=>x.plugin.id===y.plugin.id));this._notify(diff(previousDescriptors,descriptors),chart,'stop');this._notify(diff(descriptors,previousDescriptors),chart,'start');}} -function allPlugins(config){const localIds={};const plugins=[];const keys=Object.keys(registry.plugins.items);for(let i=0;i{const scaleConf=configScales[id];if(!isObject(scaleConf)){return console.error(`Invalid scale configuration for scale: ${id}`);} -if(scaleConf._proxy){return console.warn(`Ignoring resolver passed as options for scale: ${id}`);} -const axis=determineAxis(id,scaleConf);const defaultId=getDefaultScaleIDFromAxis(axis,chartIndexAxis);const defaultScaleOptions=chartDefaults.scales||{};firstIDs[axis]=firstIDs[axis]||id;scales[id]=mergeIf(Object.create(null),[{axis},scaleConf,defaultScaleOptions[axis],defaultScaleOptions[defaultId]]);});config.data.datasets.forEach(dataset=>{const type=dataset.type||config.type;const indexAxis=dataset.indexAxis||getIndexAxis(type,options);const datasetDefaults=overrides[type]||{};const defaultScaleOptions=datasetDefaults.scales||{};Object.keys(defaultScaleOptions).forEach(defaultID=>{const axis=getAxisFromDefaultScaleID(defaultID,indexAxis);const id=dataset[axis+'AxisID']||firstIDs[axis]||axis;scales[id]=scales[id]||Object.create(null);mergeIf(scales[id],[{axis},configScales[id],defaultScaleOptions[defaultID]]);});});Object.keys(scales).forEach(key=>{const scale=scales[key];mergeIf(scale,[defaults.scales[scale.type],defaults.scale]);});return scales;} -function initOptions(config){const options=config.options||(config.options={});options.plugins=valueOrDefault(options.plugins,{});options.scales=mergeScaleConfig(config,options);} -function initData(data){data=data||{};data.datasets=data.datasets||[];data.labels=data.labels||[];return data;} -function initConfig(config){config=config||{};config.data=initData(config.data);initOptions(config);return config;} -const keyCache=new Map();const keysCached=new Set();function cachedKeys(cacheKey,generate){let keys=keyCache.get(cacheKey);if(!keys){keys=generate();keyCache.set(cacheKey,keys);keysCached.add(keys);} -return keys;} -const addIfFound=(set,obj,key)=>{const opts=resolveObjectKey(obj,key);if(opts!==undefined){set.add(opts);}};class Config{constructor(config){this._config=initConfig(config);this._scopeCache=new Map();this._resolverCache=new Map();} -get platform(){return this._config.platform;} -get type(){return this._config.type;} -set type(type){this._config.type=type;} -get data(){return this._config.data;} -set data(data){this._config.data=initData(data);} -get options(){return this._config.options;} -set options(options){this._config.options=options;} -get plugins(){return this._config.plugins;} -update(){const config=this._config;this.clearCache();initOptions(config);} -clearCache(){this._scopeCache.clear();this._resolverCache.clear();} -datasetScopeKeys(datasetType){return cachedKeys(datasetType,()=>[[`datasets.${datasetType}`,'']]);} -datasetAnimationScopeKeys(datasetType,transition){return cachedKeys(`${datasetType}.transition.${transition}`,()=>[[`datasets.${datasetType}.transitions.${transition}`,`transitions.${transition}`,],[`datasets.${datasetType}`,'']]);} -datasetElementScopeKeys(datasetType,elementType){return cachedKeys(`${datasetType}-${elementType}`,()=>[[`datasets.${datasetType}.elements.${elementType}`,`datasets.${datasetType}`,`elements.${elementType}`,'']]);} -pluginScopeKeys(plugin){const id=plugin.id;const type=this.type;return cachedKeys(`${type}-plugin-${id}`,()=>[[`plugins.${id}`,...plugin.additionalOptionScopes||[],]]);} -_cachedScopes(mainScope,resetCache){const _scopeCache=this._scopeCache;let cache=_scopeCache.get(mainScope);if(!cache||resetCache){cache=new Map();_scopeCache.set(mainScope,cache);} -return cache;} -getOptionScopes(mainScope,keyLists,resetCache){const{options,type}=this;const cache=this._cachedScopes(mainScope,resetCache);const cached=cache.get(keyLists);if(cached){return cached;} -const scopes=new Set();keyLists.forEach(keys=>{if(mainScope){scopes.add(mainScope);keys.forEach(key=>addIfFound(scopes,mainScope,key));} -keys.forEach(key=>addIfFound(scopes,options,key));keys.forEach(key=>addIfFound(scopes,overrides[type]||{},key));keys.forEach(key=>addIfFound(scopes,defaults,key));keys.forEach(key=>addIfFound(scopes,descriptors,key));});const array=Array.from(scopes);if(array.length===0){array.push(Object.create(null));} -if(keysCached.has(keyLists)){cache.set(keyLists,array);} -return array;} -chartOptionScopes(){const{options,type}=this;return[options,overrides[type]||{},defaults.datasets[type]||{},{type},defaults,descriptors];} -resolveNamedOptions(scopes,names,context,prefixes=['']){const result={$shared:true};const{resolver,subPrefixes}=getResolver(this._resolverCache,scopes,prefixes);let options=resolver;if(needContext(resolver,names)){result.$shared=false;context=isFunction(context)?context():context;const subResolver=this.createResolver(scopes,context,subPrefixes);options=_attachContext(resolver,context,subResolver);} -for(const prop of names){result[prop]=options[prop];} -return result;} -createResolver(scopes,context,prefixes=[''],descriptorDefaults){const{resolver}=getResolver(this._resolverCache,scopes,prefixes);return isObject(context)?_attachContext(resolver,context,undefined,descriptorDefaults):resolver;}} -function getResolver(resolverCache,scopes,prefixes){let cache=resolverCache.get(scopes);if(!cache){cache=new Map();resolverCache.set(scopes,cache);} -const cacheKey=prefixes.join();let cached=cache.get(cacheKey);if(!cached){const resolver=_createResolver(scopes,prefixes);cached={resolver,subPrefixes:prefixes.filter(p=>!p.toLowerCase().includes('hover'))};cache.set(cacheKey,cached);} -return cached;} -const hasFunction=value=>isObject(value)&&Object.getOwnPropertyNames(value).reduce((acc,key)=>acc||isFunction(value[key]),false);function needContext(proxy,names){const{isScriptable,isIndexable}=_descriptors(proxy);for(const prop of names){const scriptable=isScriptable(prop);const indexable=isIndexable(prop);const value=(indexable||scriptable)&&proxy[prop];if((scriptable&&(isFunction(value)||hasFunction(value)))||(indexable&&isArray(value))){return true;}} -return false;} -var version="3.9.1";const KNOWN_POSITIONS=['top','bottom','left','right','chartArea'];function positionIsHorizontal(position,axis){return position==='top'||position==='bottom'||(KNOWN_POSITIONS.indexOf(position)===-1&&axis==='x');} -function compare2Level(l1,l2){return function(a,b){return a[l1]===b[l1]?a[l2]-b[l2]:a[l1]-b[l1];};} -function onAnimationsComplete(context){const chart=context.chart;const animationOptions=chart.options.animation;chart.notifyPlugins('afterRender');callback(animationOptions&&animationOptions.onComplete,[context],chart);} -function onAnimationProgress(context){const chart=context.chart;const animationOptions=chart.options.animation;callback(animationOptions&&animationOptions.onProgress,[context],chart);} -function getCanvas(item){if(_isDomSupported()&&typeof item==='string'){item=document.getElementById(item);}else if(item&&item.length){item=item[0];} -if(item&&item.canvas){item=item.canvas;} -return item;} -const instances={};const getChart=(key)=>{const canvas=getCanvas(key);return Object.values(instances).filter((c)=>c.canvas===canvas).pop();};function moveNumericKeys(obj,start,move){const keys=Object.keys(obj);for(const key of keys){const intKey=+key;if(intKey>=start){const value=obj[key];delete obj[key];if(move>0||intKey>start){obj[intKey+move]=value;}}}} -function determineLastEvent(e,lastEvent,inChartArea,isClick){if(!inChartArea||e.type==='mouseout'){return null;} -if(isClick){return lastEvent;} -return e;} -class Chart{constructor(item,userConfig){const config=this.config=new Config(userConfig);const initialCanvas=getCanvas(item);const existingChart=getChart(initialCanvas);if(existingChart){throw new Error('Canvas is already in use. Chart with ID \''+existingChart.id+'\''+' must be destroyed before the canvas with ID \''+existingChart.canvas.id+'\' can be reused.');} -const options=config.createResolver(config.chartOptionScopes(),this.getContext());this.platform=new(config.platform||_detectPlatform(initialCanvas))();this.platform.updateConfig(config);const context=this.platform.acquireContext(initialCanvas,options.aspectRatio);const canvas=context&&context.canvas;const height=canvas&&canvas.height;const width=canvas&&canvas.width;this.id=uid();this.ctx=context;this.canvas=canvas;this.width=width;this.height=height;this._options=options;this._aspectRatio=this.aspectRatio;this._layers=[];this._metasets=[];this._stacks=undefined;this.boxes=[];this.currentDevicePixelRatio=undefined;this.chartArea=undefined;this._active=[];this._lastEvent=undefined;this._listeners={};this._responsiveListeners=undefined;this._sortedMetasets=[];this.scales={};this._plugins=new PluginService();this.$proxies={};this._hiddenIndices={};this.attached=false;this._animationsDisabled=undefined;this.$context=undefined;this._doResize=debounce(mode=>this.update(mode),options.resizeDelay||0);this._dataChanges=[];instances[this.id]=this;if(!context||!canvas){console.error("Failed to create chart: can't acquire context from the given item");return;} -animator.listen(this,'complete',onAnimationsComplete);animator.listen(this,'progress',onAnimationProgress);this._initialize();if(this.attached){this.update();}} -get aspectRatio(){const{options:{aspectRatio,maintainAspectRatio},width,height,_aspectRatio}=this;if(!isNullOrUndef(aspectRatio)){return aspectRatio;} -if(maintainAspectRatio&&_aspectRatio){return _aspectRatio;} -return height?width/height:null;} -get data(){return this.config.data;} -set data(data){this.config.data=data;} -get options(){return this._options;} -set options(options){this.config.options=options;} -_initialize(){this.notifyPlugins('beforeInit');if(this.options.responsive){this.resize();}else{retinaScale(this,this.options.devicePixelRatio);} -this.bindEvents();this.notifyPlugins('afterInit');return this;} -clear(){clearCanvas(this.canvas,this.ctx);return this;} -stop(){animator.stop(this);return this;} -resize(width,height){if(!animator.running(this)){this._resize(width,height);}else{this._resizeBeforeDraw={width,height};}} -_resize(width,height){const options=this.options;const canvas=this.canvas;const aspectRatio=options.maintainAspectRatio&&this.aspectRatio;const newSize=this.platform.getMaximumSize(canvas,width,height,aspectRatio);const newRatio=options.devicePixelRatio||this.platform.getDevicePixelRatio();const mode=this.width?'resize':'attach';this.width=newSize.width;this.height=newSize.height;this._aspectRatio=this.aspectRatio;if(!retinaScale(this,newRatio,true)){return;} -this.notifyPlugins('resize',{size:newSize});callback(options.onResize,[this,newSize],this);if(this.attached){if(this._doResize(mode)){this.render();}}} -ensureScalesHaveIDs(){const options=this.options;const scalesOptions=options.scales||{};each(scalesOptions,(axisOptions,axisID)=>{axisOptions.id=axisID;});} -buildOrUpdateScales(){const options=this.options;const scaleOpts=options.scales;const scales=this.scales;const updated=Object.keys(scales).reduce((obj,id)=>{obj[id]=false;return obj;},{});let items=[];if(scaleOpts){items=items.concat(Object.keys(scaleOpts).map((id)=>{const scaleOptions=scaleOpts[id];const axis=determineAxis(id,scaleOptions);const isRadial=axis==='r';const isHorizontal=axis==='x';return{options:scaleOptions,dposition:isRadial?'chartArea':isHorizontal?'bottom':'left',dtype:isRadial?'radialLinear':isHorizontal?'category':'linear'};}));} -each(items,(item)=>{const scaleOptions=item.options;const id=scaleOptions.id;const axis=determineAxis(id,scaleOptions);const scaleType=valueOrDefault(scaleOptions.type,item.dtype);if(scaleOptions.position===undefined||positionIsHorizontal(scaleOptions.position,axis)!==positionIsHorizontal(item.dposition)){scaleOptions.position=item.dposition;} -updated[id]=true;let scale=null;if(id in scales&&scales[id].type===scaleType){scale=scales[id];}else{const scaleClass=registry.getScale(scaleType);scale=new scaleClass({id,type:scaleType,ctx:this.ctx,chart:this});scales[scale.id]=scale;} -scale.init(scaleOptions,options);});each(updated,(hasUpdated,id)=>{if(!hasUpdated){delete scales[id];}});each(scales,(scale)=>{layouts.configure(this,scale,scale.options);layouts.addBox(this,scale);});} -_updateMetasets(){const metasets=this._metasets;const numData=this.data.datasets.length;const numMeta=metasets.length;metasets.sort((a,b)=>a.index-b.index);if(numMeta>numData){for(let i=numData;idatasets.length){delete this._stacks;} -metasets.forEach((meta,index)=>{if(datasets.filter(x=>x===meta._dataset).length===0){this._destroyDatasetMeta(index);}});} -buildOrUpdateControllers(){const newControllers=[];const datasets=this.data.datasets;let i,ilen;this._removeUnreferencedMetasets();for(i=0,ilen=datasets.length;i{this.getDatasetMeta(datasetIndex).controller.reset();},this);} -reset(){this._resetElements();this.notifyPlugins('reset');} -update(mode){const config=this.config;config.update();const options=this._options=config.createResolver(config.chartOptionScopes(),this.getContext());const animsDisabled=this._animationsDisabled=!options.animation;this._updateScales();this._checkEventBindings();this._updateHiddenIndices();this._plugins.invalidate();if(this.notifyPlugins('beforeUpdate',{mode,cancelable:true})===false){return;} -const newControllers=this.buildOrUpdateControllers();this.notifyPlugins('beforeElementsUpdate');let minPadding=0;for(let i=0,ilen=this.data.datasets.length;i{controller.reset();});} -this._updateDatasets(mode);this.notifyPlugins('afterUpdate',{mode});this._layers.sort(compare2Level('z','_idx'));const{_active,_lastEvent}=this;if(_lastEvent){this._eventHandler(_lastEvent,true);}else if(_active.length){this._updateHoverStyles(_active,_active,true);} -this.render();} -_updateScales(){each(this.scales,(scale)=>{layouts.removeBox(this,scale);});this.ensureScalesHaveIDs();this.buildOrUpdateScales();} -_checkEventBindings(){const options=this.options;const existingEvents=new Set(Object.keys(this._listeners));const newEvents=new Set(options.events);if(!setsEqual(existingEvents,newEvents)||!!this._responsiveListeners!==options.responsive){this.unbindEvents();this.bindEvents();}} -_updateHiddenIndices(){const{_hiddenIndices}=this;const changes=this._getUniformDataChanges()||[];for(const{method,start,count}of changes){const move=method==='_removeElements'?-count:count;moveNumericKeys(_hiddenIndices,start,move);}} -_getUniformDataChanges(){const _dataChanges=this._dataChanges;if(!_dataChanges||!_dataChanges.length){return;} -this._dataChanges=[];const datasetCount=this.data.datasets.length;const makeSet=(idx)=>new Set(_dataChanges.filter(c=>c[0]===idx).map((c,i)=>i+','+c.splice(1).join(',')));const changeSet=makeSet(0);for(let i=1;ic.split(',')).map(a=>({method:a[1],start:+a[2],count:+a[3]}));} -_updateLayout(minPadding){if(this.notifyPlugins('beforeLayout',{cancelable:true})===false){return;} -layouts.update(this,this.width,this.height,minPadding);const area=this.chartArea;const noArea=area.width<=0||area.height<=0;this._layers=[];each(this.boxes,(box)=>{if(noArea&&box.position==='chartArea'){return;} -if(box.configure){box.configure();} -this._layers.push(...box._layers());},this);this._layers.forEach((item,index)=>{item._idx=index;});this.notifyPlugins('afterLayout');} -_updateDatasets(mode){if(this.notifyPlugins('beforeDatasetsUpdate',{mode,cancelable:true})===false){return;} -for(let i=0,ilen=this.data.datasets.length;i=0;--i){this._drawDataset(metasets[i]);} -this.notifyPlugins('afterDatasetsDraw');} -_drawDataset(meta){const ctx=this.ctx;const clip=meta._clip;const useClip=!clip.disabled;const area=this.chartArea;const args={meta,index:meta.index,cancelable:true};if(this.notifyPlugins('beforeDatasetDraw',args)===false){return;} -if(useClip){clipArea(ctx,{left:clip.left===false?0:area.left-clip.left,right:clip.right===false?this.width:area.right+clip.right,top:clip.top===false?0:area.top-clip.top,bottom:clip.bottom===false?this.height:area.bottom+clip.bottom});} -meta.controller.draw();if(useClip){unclipArea(ctx);} -args.cancelable=false;this.notifyPlugins('afterDatasetDraw',args);} -isPointInArea(point){return _isPointInArea(point,this.chartArea,this._minPadding);} -getElementsAtEventForMode(e,mode,options,useFinalPosition){const method=Interaction.modes[mode];if(typeof method==='function'){return method(this,e,options,useFinalPosition);} -return[];} -getDatasetMeta(datasetIndex){const dataset=this.data.datasets[datasetIndex];const metasets=this._metasets;let meta=metasets.filter(x=>x&&x._dataset===dataset).pop();if(!meta){meta={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:dataset&&dataset.order||0,index:datasetIndex,_dataset:dataset,_parsed:[],_sorted:false};metasets.push(meta);} -return meta;} -getContext(){return this.$context||(this.$context=createContext(null,{chart:this,type:'chart'}));} -getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length;} -isDatasetVisible(datasetIndex){const dataset=this.data.datasets[datasetIndex];if(!dataset){return false;} -const meta=this.getDatasetMeta(datasetIndex);return typeof meta.hidden==='boolean'?!meta.hidden:!dataset.hidden;} -setDatasetVisibility(datasetIndex,visible){const meta=this.getDatasetMeta(datasetIndex);meta.hidden=!visible;} -toggleDataVisibility(index){this._hiddenIndices[index]=!this._hiddenIndices[index];} -getDataVisibility(index){return!this._hiddenIndices[index];} -_updateVisibility(datasetIndex,dataIndex,visible){const mode=visible?'show':'hide';const meta=this.getDatasetMeta(datasetIndex);const anims=meta.controller._resolveAnimations(undefined,mode);if(defined(dataIndex)){meta.data[dataIndex].hidden=!visible;this.update();}else{this.setDatasetVisibility(datasetIndex,visible);anims.update(meta,{visible});this.update((ctx)=>ctx.datasetIndex===datasetIndex?mode:undefined);}} -hide(datasetIndex,dataIndex){this._updateVisibility(datasetIndex,dataIndex,false);} -show(datasetIndex,dataIndex){this._updateVisibility(datasetIndex,dataIndex,true);} -_destroyDatasetMeta(datasetIndex){const meta=this._metasets[datasetIndex];if(meta&&meta.controller){meta.controller._destroy();} -delete this._metasets[datasetIndex];} -_stop(){let i,ilen;this.stop();animator.remove(this);for(i=0,ilen=this.data.datasets.length;i{platform.addEventListener(this,type,listener);listeners[type]=listener;};const listener=(e,x,y)=>{e.offsetX=x;e.offsetY=y;this._eventHandler(e);};each(this.options.events,(type)=>_add(type,listener));} -bindResponsiveEvents(){if(!this._responsiveListeners){this._responsiveListeners={};} -const listeners=this._responsiveListeners;const platform=this.platform;const _add=(type,listener)=>{platform.addEventListener(this,type,listener);listeners[type]=listener;};const _remove=(type,listener)=>{if(listeners[type]){platform.removeEventListener(this,type,listener);delete listeners[type];}};const listener=(width,height)=>{if(this.canvas){this.resize(width,height);}};let detached;const attached=()=>{_remove('attach',attached);this.attached=true;this.resize();_add('resize',listener);_add('detach',detached);};detached=()=>{this.attached=false;_remove('resize',listener);this._stop();this._resize(0,0);_add('attach',attached);};if(platform.isAttached(this.canvas)){attached();}else{detached();}} -unbindEvents(){each(this._listeners,(listener,type)=>{this.platform.removeEventListener(this,type,listener);});this._listeners={};each(this._responsiveListeners,(listener,type)=>{this.platform.removeEventListener(this,type,listener);});this._responsiveListeners=undefined;} -updateHoverStyle(items,mode,enabled){const prefix=enabled?'set':'remove';let meta,item,i,ilen;if(mode==='dataset'){meta=this.getDatasetMeta(items[0].datasetIndex);meta.controller['_'+prefix+'DatasetHoverStyle']();} -for(i=0,ilen=items.length;i{const meta=this.getDatasetMeta(datasetIndex);if(!meta){throw new Error('No dataset found at index '+datasetIndex);} -return{datasetIndex,element:meta.data[index],index,};});const changed=!_elementsEqual(active,lastActive);if(changed){this._active=active;this._lastEvent=null;this._updateHoverStyles(active,lastActive);}} -notifyPlugins(hook,args,filter){return this._plugins.notify(this,hook,args,filter);} -_updateHoverStyles(active,lastActive,replay){const hoverOptions=this.options.hover;const diff=(a,b)=>a.filter(x=>!b.some(y=>x.datasetIndex===y.datasetIndex&&x.index===y.index));const deactivated=diff(lastActive,active);const activated=replay?active:diff(active,lastActive);if(deactivated.length){this.updateHoverStyle(deactivated,hoverOptions.mode,false);} -if(activated.length&&hoverOptions.mode){this.updateHoverStyle(activated,hoverOptions.mode,true);}} -_eventHandler(e,replay){const args={event:e,replay,cancelable:true,inChartArea:this.isPointInArea(e)};const eventFilter=(plugin)=>(plugin.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins('beforeEvent',args,eventFilter)===false){return;} -const changed=this._handleEvent(e,replay,args.inChartArea);args.cancelable=false;this.notifyPlugins('afterEvent',args,eventFilter);if(changed||args.changed){this.render();} -return this;} -_handleEvent(e,replay,inChartArea){const{_active:lastActive=[],options}=this;const useFinalPosition=replay;const active=this._getActiveElements(e,lastActive,inChartArea,useFinalPosition);const isClick=_isClickEvent(e);const lastEvent=determineLastEvent(e,this._lastEvent,inChartArea,isClick);if(inChartArea){this._lastEvent=null;callback(options.onHover,[e,active,this],this);if(isClick){callback(options.onClick,[e,active,this],this);}} -const changed=!_elementsEqual(active,lastActive);if(changed||replay){this._active=active;this._updateHoverStyles(active,lastActive,replay);} -this._lastEvent=lastEvent;return changed;} -_getActiveElements(e,lastActive,inChartArea,useFinalPosition){if(e.type==='mouseout'){return[];} -if(!inChartArea){return lastActive;} -const hoverOptions=this.options.hover;return this.getElementsAtEventForMode(e,hoverOptions.mode,hoverOptions,useFinalPosition);}} -const invalidatePlugins=()=>each(Chart.instances,(chart)=>chart._plugins.invalidate());const enumerable=true;Object.defineProperties(Chart,{defaults:{enumerable,value:defaults},instances:{enumerable,value:instances},overrides:{enumerable,value:overrides},registry:{enumerable,value:registry},version:{enumerable,value:version},getChart:{enumerable,value:getChart},register:{enumerable,value:(...items)=>{registry.add(...items);invalidatePlugins();}},unregister:{enumerable,value:(...items)=>{registry.remove(...items);invalidatePlugins();}}});function abstract(){throw new Error('This method is not implemented: Check that a complete date adapter is provided.');} -class DateAdapter{constructor(options){this.options=options||{};} -init(chartOptions){} -formats(){return abstract();} -parse(value,format){return abstract();} -format(timestamp,format){return abstract();} -add(timestamp,amount,unit){return abstract();} -diff(a,b,unit){return abstract();} -startOf(timestamp,unit,weekday){return abstract();} -endOf(timestamp,unit){return abstract();}} -DateAdapter.override=function(members){Object.assign(DateAdapter.prototype,members);};var _adapters={_date:DateAdapter};function getAllScaleValues(scale,type){if(!scale._cache.$bar){const visibleMetas=scale.getMatchingVisibleMetas(type);let values=[];for(let i=0,ilen=visibleMetas.length;ia-b));} -return scale._cache.$bar;} -function computeMinSampleSize(meta){const scale=meta.iScale;const values=getAllScaleValues(scale,meta.type);let min=scale._length;let i,ilen,curr,prev;const updateMinAndPrev=()=>{if(curr===32767||curr===-32768){return;} -if(defined(prev)){min=Math.min(min,Math.abs(curr-prev)||min);} -prev=curr;};for(i=0,ilen=values.length;i0?pixels[index-1]:null;let next=indexMath.abs(max)){barStart=max;barEnd=min;} -item[vScale.axis]=barEnd;item._custom={barStart,barEnd,start:startValue,end:endValue,min,max};} -function parseValue(entry,item,vScale,i){if(isArray(entry)){parseFloatBar(entry,item,vScale,i);}else{item[vScale.axis]=vScale.parse(entry,i);} -return item;} -function parseArrayOrPrimitive(meta,data,start,count){const iScale=meta.iScale;const vScale=meta.vScale;const labels=iScale.getLabels();const singleScale=iScale===vScale;const parsed=[];let i,ilen,item,entry;for(i=start,ilen=start+count;i=actualBase?1:-1);} -function borderProps(properties){let reverse,start,end,top,bottom;if(properties.horizontal){reverse=properties.base>properties.x;start='left';end='right';}else{reverse=properties.basemeta.controller.options.grouped);const stacked=iScale.options.stacked;const stacks=[];const skipNull=(meta)=>{const parsed=meta.controller.getParsed(dataIndex);const val=parsed&&parsed[meta.vScale.axis];if(isNullOrUndef(val)||isNaN(val)){return true;}};for(const meta of metasets){if(dataIndex!==undefined&&skipNull(meta)){continue;} -if(stacked===false||stacks.indexOf(meta.stack)===-1||(stacked===undefined&&meta.stack===undefined)){stacks.push(meta.stack);} -if(meta.index===last){break;}} -if(!stacks.length){stacks.push(undefined);} -return stacks;} -_getStackCount(index){return this._getStacks(undefined,index).length;} -_getStackIndex(datasetIndex,name,dataIndex){const stacks=this._getStacks(datasetIndex,dataIndex);const index=(name!==undefined)?stacks.indexOf(name):-1;return(index===-1)?stacks.length-1:index;} -_getRuler(){const opts=this.options;const meta=this._cachedMeta;const iScale=meta.iScale;const pixels=[];let i,ilen;for(i=0,ilen=meta.data.length;i=0;--i){max=Math.max(max,data[i].size(this.resolveDataElementOptions(i))/2);} -return max>0&&max;} -getLabelAndValue(index){const meta=this._cachedMeta;const{xScale,yScale}=meta;const parsed=this.getParsed(index);const x=xScale.getLabelForValue(parsed.x);const y=yScale.getLabelForValue(parsed.y);const r=parsed._custom;return{label:meta.label,value:'('+x+', '+y+(r?', '+r:'')+')'};} -update(mode){const points=this._cachedMeta.data;this.updateElements(points,0,points.length,mode);} -updateElements(points,start,count,mode){const reset=mode==='reset';const{iScale,vScale}=this._cachedMeta;const{sharedOptions,includeOptions}=this._getSharedOptions(start,mode);const iAxis=iScale.axis;const vAxis=vScale.axis;for(let i=start;i_angleBetween(angle,startAngle,endAngle,true)?1:Math.max(a,a*cutout,b,b*cutout);const calcMin=(angle,a,b)=>_angleBetween(angle,startAngle,endAngle,true)?-1:Math.min(a,a*cutout,b,b*cutout);const maxX=calcMax(0,startX,endX);const maxY=calcMax(HALF_PI,startY,endY);const minX=calcMin(PI,startX,endX);const minY=calcMin(PI+HALF_PI,startY,endY);ratioX=(maxX-minX)/2;ratioY=(maxY-minY)/2;offsetX=-(maxX+minX)/2;offsetY=-(maxY+minY)/2;} -return{ratioX,ratioY,offsetX,offsetY};} -class DoughnutController extends DatasetController{constructor(chart,datasetIndex){super(chart,datasetIndex);this.enableOptionSharing=true;this.innerRadius=undefined;this.outerRadius=undefined;this.offsetX=undefined;this.offsetY=undefined;} -linkScales(){} -parse(start,count){const data=this.getDataset().data;const meta=this._cachedMeta;if(this._parsing===false){meta._parsed=data;}else{let getter=(i)=>+data[i];if(isObject(data[start])){const{key='value'}=this._parsing;getter=(i)=>+resolveObjectKey(data[i],key);} -let i,ilen;for(i=start,ilen=start+count;i0&&!isNaN(value)){return TAU*(Math.abs(value)/total);} -return 0;} -getLabelAndValue(index){const meta=this._cachedMeta;const chart=this.chart;const labels=chart.data.labels||[];const value=formatNumber(meta._parsed[index],chart.options.locale);return{label:labels[index]||'',value,};} -getMaxBorderWidth(arcs){let max=0;const chart=this.chart;let i,ilen,meta,controller,options;if(!arcs){for(i=0,ilen=chart.data.datasets.length;iname!=='spacing',_indexable:(name)=>name!=='spacing',};DoughnutController.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(chart){const data=chart.data;if(data.labels.length&&data.datasets.length){const{labels:{pointStyle}}=chart.legend.options;return data.labels.map((label,i)=>{const meta=chart.getDatasetMeta(0);const style=meta.controller.getStyle(i);return{text:label,fillStyle:style.backgroundColor,strokeStyle:style.borderColor,lineWidth:style.borderWidth,pointStyle:pointStyle,hidden:!chart.getDataVisibility(i),index:i};});} -return[];}},onClick(e,legendItem,legend){legend.chart.toggleDataVisibility(legendItem.index);legend.chart.update();}},tooltip:{callbacks:{title(){return'';},label(tooltipItem){let dataLabel=tooltipItem.label;const value=': '+tooltipItem.formattedValue;if(isArray(dataLabel)){dataLabel=dataLabel.slice();dataLabel[0]+=value;}else{dataLabel+=value;} -return dataLabel;}}}}};class LineController extends DatasetController{initialize(){this.enableOptionSharing=true;this.supportsDecimation=true;super.initialize();} -update(mode){const meta=this._cachedMeta;const{dataset:line,data:points=[],_dataset}=meta;const animationsDisabled=this.chart._animationsDisabled;let{start,count}=_getStartAndCountOfVisiblePoints(meta,points,animationsDisabled);this._drawStart=start;this._drawCount=count;if(_scaleRangesChanged(meta)){start=0;count=points.length;} -line._chart=this.chart;line._datasetIndex=this.index;line._decimated=!!_dataset._decimated;line.points=points;const options=this.resolveDatasetElementOptions(mode);if(!this.options.showLine){options.borderWidth=0;} -options.segment=this.options.segment;this.updateElement(line,undefined,{animated:!animationsDisabled,options},mode);this.updateElements(points,start,count,mode);} -updateElements(points,start,count,mode){const reset=mode==='reset';const{iScale,vScale,_stacked,_dataset}=this._cachedMeta;const{sharedOptions,includeOptions}=this._getSharedOptions(start,mode);const iAxis=iScale.axis;const vAxis=vScale.axis;const{spanGaps,segment}=this.options;const maxGapLength=isNumber(spanGaps)?spanGaps:Number.POSITIVE_INFINITY;const directUpdate=this.chart._animationsDisabled||reset||mode==='none';let prevParsed=start>0&&this.getParsed(start-1);for(let i=start;i0&&(Math.abs(parsed[iAxis]-prevParsed[iAxis]))>maxGapLength;if(segment){properties.parsed=parsed;properties.raw=_dataset.data[i];} -if(includeOptions){properties.options=sharedOptions||this.resolveDataElementOptions(i,point.active?'active':mode);} -if(!directUpdate){this.updateElement(point,i,properties,mode);} -prevParsed=parsed;}} -getMaxOverflow(){const meta=this._cachedMeta;const dataset=meta.dataset;const border=dataset.options&&dataset.options.borderWidth||0;const data=meta.data||[];if(!data.length){return border;} -const firstPoint=data[0].size(this.resolveDataElementOptions(0));const lastPoint=data[data.length-1].size(this.resolveDataElementOptions(data.length-1));return Math.max(border,firstPoint,lastPoint)/2;} -draw(){const meta=this._cachedMeta;meta.dataset.updateControlPoints(this.chart.chartArea,meta.iScale.axis);super.draw();}} -LineController.id='line';LineController.defaults={datasetElementType:'line',dataElementType:'point',showLine:true,spanGaps:false,};LineController.overrides={scales:{_index_:{type:'category',},_value_:{type:'linear',},}};class PolarAreaController extends DatasetController{constructor(chart,datasetIndex){super(chart,datasetIndex);this.innerRadius=undefined;this.outerRadius=undefined;} -getLabelAndValue(index){const meta=this._cachedMeta;const chart=this.chart;const labels=chart.data.labels||[];const value=formatNumber(meta._parsed[index].r,chart.options.locale);return{label:labels[index]||'',value,};} -parseObjectData(meta,data,start,count){return _parseObjectDataRadialScale.bind(this)(meta,data,start,count);} -update(mode){const arcs=this._cachedMeta.data;this._updateRadius();this.updateElements(arcs,0,arcs.length,mode);} -getMinMax(){const meta=this._cachedMeta;const range={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};meta.data.forEach((element,index)=>{const parsed=this.getParsed(index).r;if(!isNaN(parsed)&&this.chart.getDataVisibility(index)){if(parsedrange.max){range.max=parsed;}}});return range;} -_updateRadius(){const chart=this.chart;const chartArea=chart.chartArea;const opts=chart.options;const minSize=Math.min(chartArea.right-chartArea.left,chartArea.bottom-chartArea.top);const outerRadius=Math.max(minSize/2,0);const innerRadius=Math.max(opts.cutoutPercentage?(outerRadius/100)*(opts.cutoutPercentage):1,0);const radiusLength=(outerRadius-innerRadius)/chart.getVisibleDatasetCount();this.outerRadius=outerRadius-(radiusLength*this.index);this.innerRadius=this.outerRadius-radiusLength;} -updateElements(arcs,start,count,mode){const reset=mode==='reset';const chart=this.chart;const opts=chart.options;const animationOpts=opts.animation;const scale=this._cachedMeta.rScale;const centerX=scale.xCenter;const centerY=scale.yCenter;const datasetStartAngle=scale.getIndexAngle(0)-0.5*PI;let angle=datasetStartAngle;let i;const defaultAngle=360/this.countVisibleElements();for(i=0;i{if(!isNaN(this.getParsed(index).r)&&this.chart.getDataVisibility(index)){count++;}});return count;} -_computeAngle(index,mode,defaultAngle){return this.chart.getDataVisibility(index)?toRadians(this.resolveDataElementOptions(index,mode).angle||defaultAngle):0;}} -PolarAreaController.id='polarArea';PolarAreaController.defaults={dataElementType:'arc',animation:{animateRotate:true,animateScale:true},animations:{numbers:{type:'number',properties:['x','y','startAngle','endAngle','innerRadius','outerRadius']},},indexAxis:'r',startAngle:0,};PolarAreaController.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(chart){const data=chart.data;if(data.labels.length&&data.datasets.length){const{labels:{pointStyle}}=chart.legend.options;return data.labels.map((label,i)=>{const meta=chart.getDatasetMeta(0);const style=meta.controller.getStyle(i);return{text:label,fillStyle:style.backgroundColor,strokeStyle:style.borderColor,lineWidth:style.borderWidth,pointStyle:pointStyle,hidden:!chart.getDataVisibility(i),index:i};});} -return[];}},onClick(e,legendItem,legend){legend.chart.toggleDataVisibility(legendItem.index);legend.chart.update();}},tooltip:{callbacks:{title(){return'';},label(context){return context.chart.data.labels[context.dataIndex]+': '+context.formattedValue;}}}},scales:{r:{type:'radialLinear',angleLines:{display:false},beginAtZero:true,grid:{circular:true},pointLabels:{display:false},startAngle:0}}};class PieController extends DoughnutController{} -PieController.id='pie';PieController.defaults={cutout:0,rotation:0,circumference:360,radius:'100%'};class RadarController extends DatasetController{getLabelAndValue(index){const vScale=this._cachedMeta.vScale;const parsed=this.getParsed(index);return{label:vScale.getLabels()[index],value:''+vScale.getLabelForValue(parsed[vScale.axis])};} -parseObjectData(meta,data,start,count){return _parseObjectDataRadialScale.bind(this)(meta,data,start,count);} -update(mode){const meta=this._cachedMeta;const line=meta.dataset;const points=meta.data||[];const labels=meta.iScale.getLabels();line.points=points;if(mode!=='resize'){const options=this.resolveDatasetElementOptions(mode);if(!this.options.showLine){options.borderWidth=0;} -const properties={_loop:true,_fullLoop:labels.length===points.length,options};this.updateElement(line,undefined,properties,mode);} -this.updateElements(points,0,points.length,mode);} -updateElements(points,start,count,mode){const scale=this._cachedMeta.rScale;const reset=mode==='reset';for(let i=start;i0&&this.getParsed(start-1);for(let i=start;i0&&(Math.abs(parsed[iAxis]-prevParsed[iAxis]))>maxGapLength;if(segment){properties.parsed=parsed;properties.raw=_dataset.data[i];} -if(includeOptions){properties.options=sharedOptions||this.resolveDataElementOptions(i,point.active?'active':mode);} -if(!directUpdate){this.updateElement(point,i,properties,mode);} -prevParsed=parsed;} -this.updateSharedOptions(sharedOptions,mode,firstOpts);} -getMaxOverflow(){const meta=this._cachedMeta;const data=meta.data||[];if(!this.options.showLine){let max=0;for(let i=data.length-1;i>=0;--i){max=Math.max(max,data[i].size(this.resolveDataElementOptions(i))/2);} -return max>0&&max;} -const dataset=meta.dataset;const border=dataset.options&&dataset.options.borderWidth||0;if(!data.length){return border;} -const firstPoint=data[0].size(this.resolveDataElementOptions(0));const lastPoint=data[data.length-1].size(this.resolveDataElementOptions(data.length-1));return Math.max(border,firstPoint,lastPoint)/2;}} -ScatterController.id='scatter';ScatterController.defaults={datasetElementType:false,dataElementType:'point',showLine:false,fill:false};ScatterController.overrides={interaction:{mode:'point'},plugins:{tooltip:{callbacks:{title(){return'';},label(item){return'('+item.label+', '+item.formattedValue+')';}}}},scales:{x:{type:'linear'},y:{type:'linear'}}};var controllers=Object.freeze({__proto__:null,BarController:BarController,BubbleController:BubbleController,DoughnutController:DoughnutController,LineController:LineController,PolarAreaController:PolarAreaController,PieController:PieController,RadarController:RadarController,ScatterController:ScatterController});function clipArc(ctx,element,endAngle){const{startAngle,pixelMargin,x,y,outerRadius,innerRadius}=element;let angleMargin=pixelMargin/outerRadius;ctx.beginPath();ctx.arc(x,y,outerRadius,startAngle-angleMargin,endAngle+angleMargin);if(innerRadius>pixelMargin){angleMargin=pixelMargin/innerRadius;ctx.arc(x,y,innerRadius,endAngle+angleMargin,startAngle-angleMargin,true);}else{ctx.arc(x,y,pixelMargin,endAngle+HALF_PI,startAngle-HALF_PI);} -ctx.closePath();ctx.clip();} -function toRadiusCorners(value){return _readValueToProps(value,['outerStart','outerEnd','innerStart','innerEnd']);} -function parseBorderRadius$1(arc,innerRadius,outerRadius,angleDelta){const o=toRadiusCorners(arc.options.borderRadius);const halfThickness=(outerRadius-innerRadius)/2;const innerLimit=Math.min(halfThickness,angleDelta*innerRadius/2);const computeOuterLimit=(val)=>{const outerArcLimit=(outerRadius-Math.min(halfThickness,val))*angleDelta/2;return _limitValue(val,0,Math.min(halfThickness,outerArcLimit));};return{outerStart:computeOuterLimit(o.outerStart),outerEnd:computeOuterLimit(o.outerEnd),innerStart:_limitValue(o.innerStart,0,innerLimit),innerEnd:_limitValue(o.innerEnd,0,innerLimit),};} -function rThetaToXY(r,theta,x,y){return{x:x+r*Math.cos(theta),y:y+r*Math.sin(theta),};} -function pathArc(ctx,element,offset,spacing,end,circular){const{x,y,startAngle:start,pixelMargin,innerRadius:innerR}=element;const outerRadius=Math.max(element.outerRadius+spacing+offset-pixelMargin,0);const innerRadius=innerR>0?innerR+spacing+offset+pixelMargin:0;let spacingOffset=0;const alpha=end-start;if(spacing){const noSpacingInnerRadius=innerR>0?innerR-spacing:0;const noSpacingOuterRadius=outerRadius>0?outerRadius-spacing:0;const avNogSpacingRadius=(noSpacingInnerRadius+noSpacingOuterRadius)/2;const adjustedAngle=avNogSpacingRadius!==0?(alpha*avNogSpacingRadius)/(avNogSpacingRadius+spacing):alpha;spacingOffset=(alpha-adjustedAngle)/2;} -const beta=Math.max(0.001,alpha*outerRadius-offset/PI)/outerRadius;const angleOffset=(alpha-beta)/2;const startAngle=start+angleOffset+spacingOffset;const endAngle=end-angleOffset-spacingOffset;const{outerStart,outerEnd,innerStart,innerEnd}=parseBorderRadius$1(element,innerRadius,outerRadius,endAngle-startAngle);const outerStartAdjustedRadius=outerRadius-outerStart;const outerEndAdjustedRadius=outerRadius-outerEnd;const outerStartAdjustedAngle=startAngle+outerStart/outerStartAdjustedRadius;const outerEndAdjustedAngle=endAngle-outerEnd/outerEndAdjustedRadius;const innerStartAdjustedRadius=innerRadius+innerStart;const innerEndAdjustedRadius=innerRadius+innerEnd;const innerStartAdjustedAngle=startAngle+innerStart/innerStartAdjustedRadius;const innerEndAdjustedAngle=endAngle-innerEnd/innerEndAdjustedRadius;ctx.beginPath();if(circular){ctx.arc(x,y,outerRadius,outerStartAdjustedAngle,outerEndAdjustedAngle);if(outerEnd>0){const pCenter=rThetaToXY(outerEndAdjustedRadius,outerEndAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,outerEnd,outerEndAdjustedAngle,endAngle+HALF_PI);} -const p4=rThetaToXY(innerEndAdjustedRadius,endAngle,x,y);ctx.lineTo(p4.x,p4.y);if(innerEnd>0){const pCenter=rThetaToXY(innerEndAdjustedRadius,innerEndAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,innerEnd,endAngle+HALF_PI,innerEndAdjustedAngle+Math.PI);} -ctx.arc(x,y,innerRadius,endAngle-(innerEnd/innerRadius),startAngle+(innerStart/innerRadius),true);if(innerStart>0){const pCenter=rThetaToXY(innerStartAdjustedRadius,innerStartAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,innerStart,innerStartAdjustedAngle+Math.PI,startAngle-HALF_PI);} -const p8=rThetaToXY(outerStartAdjustedRadius,startAngle,x,y);ctx.lineTo(p8.x,p8.y);if(outerStart>0){const pCenter=rThetaToXY(outerStartAdjustedRadius,outerStartAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,outerStart,startAngle-HALF_PI,outerStartAdjustedAngle);}}else{ctx.moveTo(x,y);const outerStartX=Math.cos(outerStartAdjustedAngle)*outerRadius+x;const outerStartY=Math.sin(outerStartAdjustedAngle)*outerRadius+y;ctx.lineTo(outerStartX,outerStartY);const outerEndX=Math.cos(outerEndAdjustedAngle)*outerRadius+x;const outerEndY=Math.sin(outerEndAdjustedAngle)*outerRadius+y;ctx.lineTo(outerEndX,outerEndY);} -ctx.closePath();} -function drawArc(ctx,element,offset,spacing,circular){const{fullCircles,startAngle,circumference}=element;let endAngle=element.endAngle;if(fullCircles){pathArc(ctx,element,offset,spacing,startAngle+TAU,circular);for(let i=0;i=TAU||_angleBetween(angle,startAngle,endAngle);const withinRadius=_isBetween(distance,innerRadius+rAdjust,outerRadius+rAdjust);return(betweenAngles&&withinRadius);} -getCenterPoint(useFinalPosition){const{x,y,startAngle,endAngle,innerRadius,outerRadius}=this.getProps(['x','y','startAngle','endAngle','innerRadius','outerRadius','circumference',],useFinalPosition);const{offset,spacing}=this.options;const halfAngle=(startAngle+endAngle)/2;const halfRadius=(innerRadius+outerRadius+spacing+offset)/2;return{x:x+Math.cos(halfAngle)*halfRadius,y:y+Math.sin(halfAngle)*halfRadius};} -tooltipPosition(useFinalPosition){return this.getCenterPoint(useFinalPosition);} -draw(ctx){const{options,circumference}=this;const offset=(options.offset||0)/2;const spacing=(options.spacing||0)/2;const circular=options.circular;this.pixelMargin=(options.borderAlign==='inner')?0.33:0;this.fullCircles=circumference>TAU?Math.floor(circumference/TAU):0;if(circumference===0||this.innerRadius<0||this.outerRadius<0){return;} -ctx.save();let radiusOffset=0;if(offset){radiusOffset=offset/2;const halfAngle=(this.startAngle+this.endAngle)/2;ctx.translate(Math.cos(halfAngle)*radiusOffset,Math.sin(halfAngle)*radiusOffset);if(this.circumference>=PI){radiusOffset=offset;}} -ctx.fillStyle=options.backgroundColor;ctx.strokeStyle=options.borderColor;const endAngle=drawArc(ctx,this,radiusOffset,spacing,circular);drawBorder(ctx,this,radiusOffset,spacing,endAngle,circular);ctx.restore();}} -ArcElement.id='arc';ArcElement.defaults={borderAlign:'center',borderColor:'#fff',borderJoinStyle:undefined,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:undefined,circular:true,};ArcElement.defaultRoutes={backgroundColor:'backgroundColor'};function setStyle(ctx,options,style=options){ctx.lineCap=valueOrDefault(style.borderCapStyle,options.borderCapStyle);ctx.setLineDash(valueOrDefault(style.borderDash,options.borderDash));ctx.lineDashOffset=valueOrDefault(style.borderDashOffset,options.borderDashOffset);ctx.lineJoin=valueOrDefault(style.borderJoinStyle,options.borderJoinStyle);ctx.lineWidth=valueOrDefault(style.borderWidth,options.borderWidth);ctx.strokeStyle=valueOrDefault(style.borderColor,options.borderColor);} -function lineTo(ctx,previous,target){ctx.lineTo(target.x,target.y);} -function getLineMethod(options){if(options.stepped){return _steppedLineTo;} -if(options.tension||options.cubicInterpolationMode==='monotone'){return _bezierCurveTo;} -return lineTo;} -function pathVars(points,segment,params={}){const count=points.length;const{start:paramsStart=0,end:paramsEnd=count-1}=params;const{start:segmentStart,end:segmentEnd}=segment;const start=Math.max(paramsStart,segmentStart);const end=Math.min(paramsEnd,segmentEnd);const outside=paramsStartsegmentEnd&¶msEnd>segmentEnd;return{count,start,loop:segment.loop,ilen:end(start+(reverse?ilen-index:index))%count;const drawX=()=>{if(minY!==maxY){ctx.lineTo(avgX,maxY);ctx.lineTo(avgX,minY);ctx.lineTo(avgX,lastY);}};if(move){point=points[pointIndex(0)];ctx.moveTo(point.x,point.y);} -for(i=0;i<=ilen;++i){point=points[pointIndex(i)];if(point.skip){continue;} -const x=point.x;const y=point.y;const truncX=x|0;if(truncX===prevX){if(ymaxY){maxY=y;} -avgX=(countX*avgX+x)/++countX;}else{drawX();ctx.lineTo(x,y);prevX=truncX;countX=0;minY=maxY=y;} -lastY=y;} -drawX();} -function _getSegmentMethod(line){const opts=line.options;const borderDash=opts.borderDash&&opts.borderDash.length;const useFastPath=!line._decimated&&!line._loop&&!opts.tension&&opts.cubicInterpolationMode!=='monotone'&&!opts.stepped&&!borderDash;return useFastPath?fastPathSegment:pathSegment;} -function _getInterpolationMethod(options){if(options.stepped){return _steppedInterpolation;} -if(options.tension||options.cubicInterpolationMode==='monotone'){return _bezierInterpolation;} -return _pointInLine;} -function strokePathWithCache(ctx,line,start,count){let path=line._path;if(!path){path=line._path=new Path2D();if(line.path(path,start,count)){path.closePath();}} -setStyle(ctx,line.options);ctx.stroke(path);} -function strokePathDirect(ctx,line,start,count){const{segments,options}=line;const segmentMethod=_getSegmentMethod(line);for(const segment of segments){setStyle(ctx,options,segment.style);ctx.beginPath();if(segmentMethod(ctx,line,segment,{start,end:start+count-1})){ctx.closePath();} -ctx.stroke();}} -const usePath2D=typeof Path2D==='function';function draw(ctx,line,start,count){if(usePath2D&&!line.options.segment){strokePathWithCache(ctx,line,start,count);}else{strokePathDirect(ctx,line,start,count);}} -class LineElement extends Element{constructor(cfg){super();this.animated=true;this.options=undefined;this._chart=undefined;this._loop=undefined;this._fullLoop=undefined;this._path=undefined;this._points=undefined;this._segments=undefined;this._decimated=false;this._pointsUpdated=false;this._datasetIndex=undefined;if(cfg){Object.assign(this,cfg);}} -updateControlPoints(chartArea,indexAxis){const options=this.options;if((options.tension||options.cubicInterpolationMode==='monotone')&&!options.stepped&&!this._pointsUpdated){const loop=options.spanGaps?this._loop:this._fullLoop;_updateBezierControlPoints(this._points,options,chartArea,loop,indexAxis);this._pointsUpdated=true;}} -set points(points){this._points=points;delete this._segments;delete this._path;this._pointsUpdated=false;} -get points(){return this._points;} -get segments(){return this._segments||(this._segments=_computeSegments(this,this.options.segment));} -first(){const segments=this.segments;const points=this.points;return segments.length&&points[segments[0].start];} -last(){const segments=this.segments;const points=this.points;const count=segments.length;return count&&points[segments[count-1].end];} -interpolate(point,property){const options=this.options;const value=point[property];const points=this.points;const segments=_boundSegments(this,{property,start:value,end:value});if(!segments.length){return;} -const result=[];const _interpolate=_getInterpolationMethod(options);let i,ilen;for(i=0,ilen=segments.length;iname!=='borderDash'&&name!=='fill',};function inRange$1(el,pos,axis,useFinalPosition){const options=el.options;const{[axis]:value}=el.getProps([axis],useFinalPosition);return(Math.abs(pos-value)=count){return data.slice(start,start+count);} -const decimated=[];const bucketWidth=(count-2)/(samples-2);let sampledIndex=0;const endIndex=start+count-1;let a=start;let i,maxAreaPoint,maxArea,area,nextA;decimated[sampledIndex++]=data[a];for(i=0;imaxArea){maxArea=area;maxAreaPoint=data[j];nextA=j;}} -decimated[sampledIndex++]=maxAreaPoint;a=nextA;} -decimated[sampledIndex++]=data[endIndex];return decimated;} -function minMaxDecimation(data,start,count,availableWidth){let avgX=0;let countX=0;let i,point,x,y,prevX,minIndex,maxIndex,startIndex,minY,maxY;const decimated=[];const endIndex=start+count-1;const xMin=data[start].x;const xMax=data[endIndex].x;const dx=xMax-xMin;for(i=start;imaxY){maxY=y;maxIndex=i;} -avgX=(countX*avgX+point.x)/++countX;}else{const lastIndex=i-1;if(!isNullOrUndef(minIndex)&&!isNullOrUndef(maxIndex)){const intermediateIndex1=Math.min(minIndex,maxIndex);const intermediateIndex2=Math.max(minIndex,maxIndex);if(intermediateIndex1!==startIndex&&intermediateIndex1!==lastIndex){decimated.push({...data[intermediateIndex1],x:avgX,});} -if(intermediateIndex2!==startIndex&&intermediateIndex2!==lastIndex){decimated.push({...data[intermediateIndex2],x:avgX});}} -if(i>0&&lastIndex!==startIndex){decimated.push(data[lastIndex]);} -decimated.push(point);prevX=truncX;countX=0;minY=maxY=y;minIndex=maxIndex=startIndex=i;}} -return decimated;} -function cleanDecimatedDataset(dataset){if(dataset._decimated){const data=dataset._data;delete dataset._decimated;delete dataset._data;Object.defineProperty(dataset,'data',{value:data});}} -function cleanDecimatedData(chart){chart.data.datasets.forEach((dataset)=>{cleanDecimatedDataset(dataset);});} -function getStartAndCountOfVisiblePointsSimplified(meta,points){const pointCount=points.length;let start=0;let count;const{iScale}=meta;const{min,max,minDefined,maxDefined}=iScale.getUserBounds();if(minDefined){start=_limitValue(_lookupByKey(points,iScale.axis,min).lo,0,pointCount-1);} -if(maxDefined){count=_limitValue(_lookupByKey(points,iScale.axis,max).hi+1,start,pointCount)-start;}else{count=pointCount-start;} -return{start,count};} -var plugin_decimation={id:'decimation',defaults:{algorithm:'min-max',enabled:false,},beforeElementsUpdate:(chart,args,options)=>{if(!options.enabled){cleanDecimatedData(chart);return;} -const availableWidth=chart.width;chart.data.datasets.forEach((dataset,datasetIndex)=>{const{_data,indexAxis}=dataset;const meta=chart.getDatasetMeta(datasetIndex);const data=_data||dataset.data;if(resolve([indexAxis,chart.options.indexAxis])==='y'){return;} -if(!meta.controller.supportsDecimation){return;} -const xAxis=chart.scales[meta.xAxisID];if(xAxis.type!=='linear'&&xAxis.type!=='time'){return;} -if(chart.options.parsing){return;} -let{start,count}=getStartAndCountOfVisiblePointsSimplified(meta,data);const threshold=options.threshold||4*availableWidth;if(count<=threshold){cleanDecimatedDataset(dataset);return;} -if(isNullOrUndef(_data)){dataset._data=data;delete dataset.data;Object.defineProperty(dataset,'data',{configurable:true,enumerable:true,get:function(){return this._decimated;},set:function(d){this._data=d;}});} -let decimated;switch(options.algorithm){case'lttb':decimated=lttbDecimation(data,start,count,availableWidth,options);break;case'min-max':decimated=minMaxDecimation(data,start,count,availableWidth);break;default:throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);} -dataset._decimated=decimated;});},destroy(chart){cleanDecimatedData(chart);}};function _segments(line,target,property){const segments=line.segments;const points=line.points;const tpoints=target.points;const parts=[];for(const segment of segments){let{start,end}=segment;end=_findSegmentEnd(start,end,points);const bounds=_getBounds(property,points[start],points[end],segment.loop);if(!target.segments){parts.push({source:segment,target:bounds,start:points[start],end:points[end]});continue;} -const targetSegments=_boundSegments(target,bounds);for(const tgt of targetSegments){const subBounds=_getBounds(property,tpoints[tgt.start],tpoints[tgt.end],tgt.loop);const fillSources=_boundSegment(segment,points,subBounds);for(const fillSource of fillSources){parts.push({source:fillSource,target:tgt,start:{[property]:_getEdge(bounds,subBounds,'start',Math.max)},end:{[property]:_getEdge(bounds,subBounds,'end',Math.min)}});}}} -return parts;} -function _getBounds(property,first,last,loop){if(loop){return;} -let start=first[property];let end=last[property];if(property==='angle'){start=_normalizeAngle(start);end=_normalizeAngle(end);} -return{property,start,end};} -function _pointsFromSegments(boundary,line){const{x=null,y=null}=boundary||{};const linePoints=line.points;const points=[];line.segments.forEach(({start,end})=>{end=_findSegmentEnd(start,end,linePoints);const first=linePoints[start];const last=linePoints[end];if(y!==null){points.push({x:first.x,y});points.push({x:last.x,y});}else if(x!==null){points.push({x,y:first.y});points.push({x,y:last.y});}});return points;} -function _findSegmentEnd(start,end,points){for(;end>start;end--){const point=points[end];if(!isNaN(point.x)&&!isNaN(point.y)){break;}} -return end;} -function _getEdge(a,b,prop,fn){if(a&&b){return fn(a[prop],b[prop]);} -return a?a[prop]:b?b[prop]:0;} -function _createBoundaryLine(boundary,line){let points=[];let _loop=false;if(isArray(boundary)){_loop=true;points=boundary;}else{points=_pointsFromSegments(boundary,line);} -return points.length?new LineElement({points,options:{tension:0},_loop,_fullLoop:_loop}):null;} -function _shouldApplyFill(source){return source&&source.fill!==false;} -function _resolveTarget(sources,index,propagate){const source=sources[index];let fill=source.fill;const visited=[index];let target;if(!propagate){return fill;} -while(fill!==false&&visited.indexOf(fill)===-1){if(!isNumberFinite(fill)){return fill;} -target=sources[fill];if(!target){return false;} -if(target.visible){return fill;} -visited.push(fill);fill=target.fill;} -return false;} -function _decodeFill(line,index,count){const fill=parseFillOption(line);if(isObject(fill)){return isNaN(fill.value)?false:fill;} -let target=parseFloat(fill);if(isNumberFinite(target)&&Math.floor(target)===target){return decodeTargetIndex(fill[0],index,target,count);} -return['origin','start','end','stack','shape'].indexOf(fill)>=0&&fill;} -function decodeTargetIndex(firstCh,index,target,count){if(firstCh==='-'||firstCh==='+'){target=index+target;} -if(target===index||target<0||target>=count){return false;} -return target;} -function _getTargetPixel(fill,scale){let pixel=null;if(fill==='start'){pixel=scale.bottom;}else if(fill==='end'){pixel=scale.top;}else if(isObject(fill)){pixel=scale.getPixelForValue(fill.value);}else if(scale.getBasePixel){pixel=scale.getBasePixel();} -return pixel;} -function _getTargetValue(fill,scale,startValue){let value;if(fill==='start'){value=startValue;}else if(fill==='end'){value=scale.options.reverse?scale.min:scale.max;}else if(isObject(fill)){value=fill.value;}else{value=scale.getBaseValue();} -return value;} -function parseFillOption(line){const options=line.options;const fillOption=options.fill;let fill=valueOrDefault(fillOption&&fillOption.target,fillOption);if(fill===undefined){fill=!!options.backgroundColor;} -if(fill===false||fill===null){return false;} -if(fill===true){return'origin';} -return fill;} -function _buildStackLine(source){const{scale,index,line}=source;const points=[];const segments=line.segments;const sourcePoints=line.points;const linesBelow=getLinesBelow(scale,index);linesBelow.push(_createBoundaryLine({x:null,y:scale.bottom},line));for(let i=0;i=0;--i){const source=metasets[i].$filler;if(!source){continue;} -source.line.updateControlPoints(area,source.axis);if(draw&&source.fill){_drawfill(chart.ctx,source,area);}}},beforeDatasetsDraw(chart,_args,options){if(options.drawTime!=='beforeDatasetsDraw'){return;} -const metasets=chart.getSortedVisibleDatasetMetas();for(let i=metasets.length-1;i>=0;--i){const source=metasets[i].$filler;if(_shouldApplyFill(source)){_drawfill(chart.ctx,source,chart.chartArea);}}},beforeDatasetDraw(chart,args,options){const source=args.meta.$filler;if(!_shouldApplyFill(source)||options.drawTime!=='beforeDatasetDraw'){return;} -_drawfill(chart.ctx,source,chart.chartArea);},defaults:{propagate:true,drawTime:'beforeDatasetDraw'}};const getBoxSize=(labelOpts,fontSize)=>{let{boxHeight=fontSize,boxWidth=fontSize}=labelOpts;if(labelOpts.usePointStyle){boxHeight=Math.min(boxHeight,fontSize);boxWidth=labelOpts.pointStyleWidth||Math.min(boxWidth,fontSize);} -return{boxWidth,boxHeight,itemHeight:Math.max(fontSize,boxHeight)};};const itemsEqual=(a,b)=>a!==null&&b!==null&&a.datasetIndex===b.datasetIndex&&a.index===b.index;class Legend extends Element{constructor(config){super();this._added=false;this.legendHitBoxes=[];this._hoveredItem=null;this.doughnutMode=false;this.chart=config.chart;this.options=config.options;this.ctx=config.ctx;this.legendItems=undefined;this.columnSizes=undefined;this.lineWidths=undefined;this.maxHeight=undefined;this.maxWidth=undefined;this.top=undefined;this.bottom=undefined;this.left=undefined;this.right=undefined;this.height=undefined;this.width=undefined;this._margins=undefined;this.position=undefined;this.weight=undefined;this.fullSize=undefined;} -update(maxWidth,maxHeight,margins){this.maxWidth=maxWidth;this.maxHeight=maxHeight;this._margins=margins;this.setDimensions();this.buildLabels();this.fit();} -setDimensions(){if(this.isHorizontal()){this.width=this.maxWidth;this.left=this._margins.left;this.right=this.width;}else{this.height=this.maxHeight;this.top=this._margins.top;this.bottom=this.height;}} -buildLabels(){const labelOpts=this.options.labels||{};let legendItems=callback(labelOpts.generateLabels,[this.chart],this)||[];if(labelOpts.filter){legendItems=legendItems.filter((item)=>labelOpts.filter(item,this.chart.data));} -if(labelOpts.sort){legendItems=legendItems.sort((a,b)=>labelOpts.sort(a,b,this.chart.data));} -if(this.options.reverse){legendItems.reverse();} -this.legendItems=legendItems;} -fit(){const{options,ctx}=this;if(!options.display){this.width=this.height=0;return;} -const labelOpts=options.labels;const labelFont=toFont(labelOpts.font);const fontSize=labelFont.size;const titleHeight=this._computeTitleHeight();const{boxWidth,itemHeight}=getBoxSize(labelOpts,fontSize);let width,height;ctx.font=labelFont.string;if(this.isHorizontal()){width=this.maxWidth;height=this._fitRows(titleHeight,fontSize,boxWidth,itemHeight)+10;}else{height=this.maxHeight;width=this._fitCols(titleHeight,fontSize,boxWidth,itemHeight)+10;} -this.width=Math.min(width,options.maxWidth||this.maxWidth);this.height=Math.min(height,options.maxHeight||this.maxHeight);} -_fitRows(titleHeight,fontSize,boxWidth,itemHeight){const{ctx,maxWidth,options:{labels:{padding}}}=this;const hitboxes=this.legendHitBoxes=[];const lineWidths=this.lineWidths=[0];const lineHeight=itemHeight+padding;let totalHeight=titleHeight;ctx.textAlign='left';ctx.textBaseline='middle';let row=-1;let top=-lineHeight;this.legendItems.forEach((legendItem,i)=>{const itemWidth=boxWidth+(fontSize/2)+ctx.measureText(legendItem.text).width;if(i===0||lineWidths[lineWidths.length-1]+itemWidth+2*padding>maxWidth){totalHeight+=lineHeight;lineWidths[lineWidths.length-(i>0?0:1)]=0;top+=lineHeight;row++;} -hitboxes[i]={left:0,top,row,width:itemWidth,height:itemHeight};lineWidths[lineWidths.length-1]+=itemWidth+padding;});return totalHeight;} -_fitCols(titleHeight,fontSize,boxWidth,itemHeight){const{ctx,maxHeight,options:{labels:{padding}}}=this;const hitboxes=this.legendHitBoxes=[];const columnSizes=this.columnSizes=[];const heightLimit=maxHeight-titleHeight;let totalWidth=padding;let currentColWidth=0;let currentColHeight=0;let left=0;let col=0;this.legendItems.forEach((legendItem,i)=>{const itemWidth=boxWidth+(fontSize/2)+ctx.measureText(legendItem.text).width;if(i>0&¤tColHeight+itemHeight+2*padding>heightLimit){totalWidth+=currentColWidth+padding;columnSizes.push({width:currentColWidth,height:currentColHeight});left+=currentColWidth+padding;col++;currentColWidth=currentColHeight=0;} -hitboxes[i]={left,top:currentColHeight,col,width:itemWidth,height:itemHeight};currentColWidth=Math.max(currentColWidth,itemWidth);currentColHeight+=itemHeight+padding;});totalWidth+=currentColWidth;columnSizes.push({width:currentColWidth,height:currentColHeight});return totalWidth;} -adjustHitBoxes(){if(!this.options.display){return;} -const titleHeight=this._computeTitleHeight();const{legendHitBoxes:hitboxes,options:{align,labels:{padding},rtl}}=this;const rtlHelper=getRtlAdapter(rtl,this.left,this.width);if(this.isHorizontal()){let row=0;let left=_alignStartEnd(align,this.left+padding,this.right-this.lineWidths[row]);for(const hitbox of hitboxes){if(row!==hitbox.row){row=hitbox.row;left=_alignStartEnd(align,this.left+padding,this.right-this.lineWidths[row]);} -hitbox.top+=this.top+titleHeight+padding;hitbox.left=rtlHelper.leftForLtr(rtlHelper.x(left),hitbox.width);left+=hitbox.width+padding;}}else{let col=0;let top=_alignStartEnd(align,this.top+titleHeight+padding,this.bottom-this.columnSizes[col].height);for(const hitbox of hitboxes){if(hitbox.col!==col){col=hitbox.col;top=_alignStartEnd(align,this.top+titleHeight+padding,this.bottom-this.columnSizes[col].height);} -hitbox.top=top;hitbox.left+=this.left+padding;hitbox.left=rtlHelper.leftForLtr(rtlHelper.x(hitbox.left),hitbox.width);top+=hitbox.height+padding;}}} -isHorizontal(){return this.options.position==='top'||this.options.position==='bottom';} -draw(){if(this.options.display){const ctx=this.ctx;clipArea(ctx,this);this._draw();unclipArea(ctx);}} -_draw(){const{options:opts,columnSizes,lineWidths,ctx}=this;const{align,labels:labelOpts}=opts;const defaultColor=defaults.color;const rtlHelper=getRtlAdapter(opts.rtl,this.left,this.width);const labelFont=toFont(labelOpts.font);const{color:fontColor,padding}=labelOpts;const fontSize=labelFont.size;const halfFontSize=fontSize/2;let cursor;this.drawTitle();ctx.textAlign=rtlHelper.textAlign('left');ctx.textBaseline='middle';ctx.lineWidth=0.5;ctx.font=labelFont.string;const{boxWidth,boxHeight,itemHeight}=getBoxSize(labelOpts,fontSize);const drawLegendBox=function(x,y,legendItem){if(isNaN(boxWidth)||boxWidth<=0||isNaN(boxHeight)||boxHeight<0){return;} -ctx.save();const lineWidth=valueOrDefault(legendItem.lineWidth,1);ctx.fillStyle=valueOrDefault(legendItem.fillStyle,defaultColor);ctx.lineCap=valueOrDefault(legendItem.lineCap,'butt');ctx.lineDashOffset=valueOrDefault(legendItem.lineDashOffset,0);ctx.lineJoin=valueOrDefault(legendItem.lineJoin,'miter');ctx.lineWidth=lineWidth;ctx.strokeStyle=valueOrDefault(legendItem.strokeStyle,defaultColor);ctx.setLineDash(valueOrDefault(legendItem.lineDash,[]));if(labelOpts.usePointStyle){const drawOptions={radius:boxHeight*Math.SQRT2/2,pointStyle:legendItem.pointStyle,rotation:legendItem.rotation,borderWidth:lineWidth};const centerX=rtlHelper.xPlus(x,boxWidth/2);const centerY=y+halfFontSize;drawPointLegend(ctx,drawOptions,centerX,centerY,labelOpts.pointStyleWidth&&boxWidth);}else{const yBoxTop=y+Math.max((fontSize-boxHeight)/2,0);const xBoxLeft=rtlHelper.leftForLtr(x,boxWidth);const borderRadius=toTRBLCorners(legendItem.borderRadius);ctx.beginPath();if(Object.values(borderRadius).some(v=>v!==0)){addRoundedRectPath(ctx,{x:xBoxLeft,y:yBoxTop,w:boxWidth,h:boxHeight,radius:borderRadius,});}else{ctx.rect(xBoxLeft,yBoxTop,boxWidth,boxHeight);} -ctx.fill();if(lineWidth!==0){ctx.stroke();}} -ctx.restore();};const fillText=function(x,y,legendItem){renderText(ctx,legendItem.text,x,y+(itemHeight/2),labelFont,{strikethrough:legendItem.hidden,textAlign:rtlHelper.textAlign(legendItem.textAlign)});};const isHorizontal=this.isHorizontal();const titleHeight=this._computeTitleHeight();if(isHorizontal){cursor={x:_alignStartEnd(align,this.left+padding,this.right-lineWidths[0]),y:this.top+padding+titleHeight,line:0};}else{cursor={x:this.left+padding,y:_alignStartEnd(align,this.top+titleHeight+padding,this.bottom-columnSizes[0].height),line:0};} -overrideTextDirection(this.ctx,opts.textDirection);const lineHeight=itemHeight+padding;this.legendItems.forEach((legendItem,i)=>{ctx.strokeStyle=legendItem.fontColor||fontColor;ctx.fillStyle=legendItem.fontColor||fontColor;const textWidth=ctx.measureText(legendItem.text).width;const textAlign=rtlHelper.textAlign(legendItem.textAlign||(legendItem.textAlign=labelOpts.textAlign));const width=boxWidth+halfFontSize+textWidth;let x=cursor.x;let y=cursor.y;rtlHelper.setWidth(this.width);if(isHorizontal){if(i>0&&x+width+padding>this.right){y=cursor.y+=lineHeight;cursor.line++;x=cursor.x=_alignStartEnd(align,this.left+padding,this.right-lineWidths[cursor.line]);}}else if(i>0&&y+lineHeight>this.bottom){x=cursor.x=x+columnSizes[cursor.line].width+padding;cursor.line++;y=cursor.y=_alignStartEnd(align,this.top+titleHeight+padding,this.bottom-columnSizes[cursor.line].height);} -const realX=rtlHelper.x(x);drawLegendBox(realX,y,legendItem);x=_textX(textAlign,x+boxWidth+halfFontSize,isHorizontal?x+width:this.right,opts.rtl);fillText(rtlHelper.x(x),y,legendItem);if(isHorizontal){cursor.x+=width+padding;}else{cursor.y+=lineHeight;}});restoreTextDirection(this.ctx,opts.textDirection);} -drawTitle(){const opts=this.options;const titleOpts=opts.title;const titleFont=toFont(titleOpts.font);const titlePadding=toPadding(titleOpts.padding);if(!titleOpts.display){return;} -const rtlHelper=getRtlAdapter(opts.rtl,this.left,this.width);const ctx=this.ctx;const position=titleOpts.position;const halfFontSize=titleFont.size/2;const topPaddingPlusHalfFontSize=titlePadding.top+halfFontSize;let y;let left=this.left;let maxWidth=this.width;if(this.isHorizontal()){maxWidth=Math.max(...this.lineWidths);y=this.top+topPaddingPlusHalfFontSize;left=_alignStartEnd(opts.align,left,this.right-maxWidth);}else{const maxHeight=this.columnSizes.reduce((acc,size)=>Math.max(acc,size.height),0);y=topPaddingPlusHalfFontSize+_alignStartEnd(opts.align,this.top,this.bottom-maxHeight-opts.labels.padding-this._computeTitleHeight());} -const x=_alignStartEnd(position,left,left+maxWidth);ctx.textAlign=rtlHelper.textAlign(_toLeftRightCenter(position));ctx.textBaseline='middle';ctx.strokeStyle=titleOpts.color;ctx.fillStyle=titleOpts.color;ctx.font=titleFont.string;renderText(ctx,titleOpts.text,x,y,titleFont);} -_computeTitleHeight(){const titleOpts=this.options.title;const titleFont=toFont(titleOpts.font);const titlePadding=toPadding(titleOpts.padding);return titleOpts.display?titleFont.lineHeight+titlePadding.height:0;} -_getLegendItemAt(x,y){let i,hitBox,lh;if(_isBetween(x,this.left,this.right)&&_isBetween(y,this.top,this.bottom)){lh=this.legendHitBoxes;for(i=0;ictx.chart.options.color,boxWidth:40,padding:10,generateLabels(chart){const datasets=chart.data.datasets;const{labels:{usePointStyle,pointStyle,textAlign,color}}=chart.legend.options;return chart._getSortedDatasetMetas().map((meta)=>{const style=meta.controller.getStyle(usePointStyle?0:undefined);const borderWidth=toPadding(style.borderWidth);return{text:datasets[meta.index].label,fillStyle:style.backgroundColor,fontColor:color,hidden:!meta.visible,lineCap:style.borderCapStyle,lineDash:style.borderDash,lineDashOffset:style.borderDashOffset,lineJoin:style.borderJoinStyle,lineWidth:(borderWidth.width+borderWidth.height)/4,strokeStyle:style.borderColor,pointStyle:pointStyle||style.pointStyle,rotation:style.rotation,textAlign:textAlign||style.textAlign,borderRadius:0,datasetIndex:meta.index};},this);}},title:{color:(ctx)=>ctx.chart.options.color,display:false,position:'center',text:'',}},descriptors:{_scriptable:(name)=>!name.startsWith('on'),labels:{_scriptable:(name)=>!['generateLabels','filter','sort'].includes(name),}},};class Title extends Element{constructor(config){super();this.chart=config.chart;this.options=config.options;this.ctx=config.ctx;this._padding=undefined;this.top=undefined;this.bottom=undefined;this.left=undefined;this.right=undefined;this.width=undefined;this.height=undefined;this.position=undefined;this.weight=undefined;this.fullSize=undefined;} -update(maxWidth,maxHeight){const opts=this.options;this.left=0;this.top=0;if(!opts.display){this.width=this.height=this.right=this.bottom=0;return;} -this.width=this.right=maxWidth;this.height=this.bottom=maxHeight;const lineCount=isArray(opts.text)?opts.text.length:1;this._padding=toPadding(opts.padding);const textSize=lineCount*toFont(opts.font).lineHeight+this._padding.height;if(this.isHorizontal()){this.height=textSize;}else{this.width=textSize;}} -isHorizontal(){const pos=this.options.position;return pos==='top'||pos==='bottom';} -_drawArgs(offset){const{top,left,bottom,right,options}=this;const align=options.align;let rotation=0;let maxWidth,titleX,titleY;if(this.isHorizontal()){titleX=_alignStartEnd(align,left,right);titleY=top+offset;maxWidth=right-left;}else{if(options.position==='left'){titleX=left+offset;titleY=_alignStartEnd(align,bottom,top);rotation=PI*-0.5;}else{titleX=right-offset;titleY=_alignStartEnd(align,top,bottom);rotation=PI*0.5;} -maxWidth=bottom-top;} -return{titleX,titleY,maxWidth,rotation};} -draw(){const ctx=this.ctx;const opts=this.options;if(!opts.display){return;} -const fontOpts=toFont(opts.font);const lineHeight=fontOpts.lineHeight;const offset=lineHeight/2+this._padding.top;const{titleX,titleY,maxWidth,rotation}=this._drawArgs(offset);renderText(ctx,opts.text,0,0,fontOpts,{color:opts.color,maxWidth,rotation,textAlign:_toLeftRightCenter(opts.align),textBaseline:'middle',translation:[titleX,titleY],});}} -function createTitle(chart,titleOpts){const title=new Title({ctx:chart.ctx,options:titleOpts,chart});layouts.configure(chart,title,titleOpts);layouts.addBox(chart,title);chart.titleBlock=title;} -var plugin_title={id:'title',_element:Title,start(chart,_args,options){createTitle(chart,options);},stop(chart){const titleBlock=chart.titleBlock;layouts.removeBox(chart,titleBlock);delete chart.titleBlock;},beforeUpdate(chart,_args,options){const title=chart.titleBlock;layouts.configure(chart,title,options);title.options=options;},defaults:{align:'center',display:false,font:{weight:'bold',},fullSize:true,padding:10,position:'top',text:'',weight:2000},defaultRoutes:{color:'color'},descriptors:{_scriptable:true,_indexable:false,},};const map=new WeakMap();var plugin_subtitle={id:'subtitle',start(chart,_args,options){const title=new Title({ctx:chart.ctx,options,chart});layouts.configure(chart,title,options);layouts.addBox(chart,title);map.set(chart,title);},stop(chart){layouts.removeBox(chart,map.get(chart));map.delete(chart);},beforeUpdate(chart,_args,options){const title=map.get(chart);layouts.configure(chart,title,options);title.options=options;},defaults:{align:'center',display:false,font:{weight:'normal',},fullSize:true,padding:0,position:'top',text:'',weight:1500},defaultRoutes:{color:'color'},descriptors:{_scriptable:true,_indexable:false,},};const positioners={average(items){if(!items.length){return false;} -let i,len;let x=0;let y=0;let count=0;for(i=0,len=items.length;i-1){return str.split('\n');} -return str;} -function createTooltipItem(chart,item){const{element,datasetIndex,index}=item;const controller=chart.getDatasetMeta(datasetIndex).controller;const{label,value}=controller.getLabelAndValue(index);return{chart,label,parsed:controller.getParsed(index),raw:chart.data.datasets[datasetIndex].data[index],formattedValue:value,dataset:controller.getDataset(),dataIndex:index,datasetIndex,element};} -function getTooltipSize(tooltip,options){const ctx=tooltip.chart.ctx;const{body,footer,title}=tooltip;const{boxWidth,boxHeight}=options;const bodyFont=toFont(options.bodyFont);const titleFont=toFont(options.titleFont);const footerFont=toFont(options.footerFont);const titleLineCount=title.length;const footerLineCount=footer.length;const bodyLineItemCount=body.length;const padding=toPadding(options.padding);let height=padding.height;let width=0;let combinedBodyLength=body.reduce((count,bodyItem)=>count+bodyItem.before.length+bodyItem.lines.length+bodyItem.after.length,0);combinedBodyLength+=tooltip.beforeBody.length+tooltip.afterBody.length;if(titleLineCount){height+=titleLineCount*titleFont.lineHeight -+(titleLineCount-1)*options.titleSpacing -+options.titleMarginBottom;} -if(combinedBodyLength){const bodyLineHeight=options.displayColors?Math.max(boxHeight,bodyFont.lineHeight):bodyFont.lineHeight;height+=bodyLineItemCount*bodyLineHeight -+(combinedBodyLength-bodyLineItemCount)*bodyFont.lineHeight -+(combinedBodyLength-1)*options.bodySpacing;} -if(footerLineCount){height+=options.footerMarginTop -+footerLineCount*footerFont.lineHeight -+(footerLineCount-1)*options.footerSpacing;} -let widthPadding=0;const maxLineWidth=function(line){width=Math.max(width,ctx.measureText(line).width+widthPadding);};ctx.save();ctx.font=titleFont.string;each(tooltip.title,maxLineWidth);ctx.font=bodyFont.string;each(tooltip.beforeBody.concat(tooltip.afterBody),maxLineWidth);widthPadding=options.displayColors?(boxWidth+2+options.boxPadding):0;each(body,(bodyItem)=>{each(bodyItem.before,maxLineWidth);each(bodyItem.lines,maxLineWidth);each(bodyItem.after,maxLineWidth);});widthPadding=0;ctx.font=footerFont.string;each(tooltip.footer,maxLineWidth);ctx.restore();width+=padding.width;return{width,height};} -function determineYAlign(chart,size){const{y,height}=size;if(y(chart.height-height/2)){return'bottom';} -return'center';} -function doesNotFitWithAlign(xAlign,chart,options,size){const{x,width}=size;const caret=options.caretSize+options.caretPadding;if(xAlign==='left'&&x+width+caret>chart.width){return true;} -if(xAlign==='right'&&x-width-caret<0){return true;}} -function determineXAlign(chart,options,size,yAlign){const{x,width}=size;const{width:chartWidth,chartArea:{left,right}}=chart;let xAlign='center';if(yAlign==='center'){xAlign=x<=(left+right)/2?'left':'right';}else if(x<=width/2){xAlign='left';}else if(x>=chartWidth-width/2){xAlign='right';} -if(doesNotFitWithAlign(xAlign,chart,options,size)){xAlign='center';} -return xAlign;} -function determineAlignment(chart,options,size){const yAlign=size.yAlign||options.yAlign||determineYAlign(chart,size);return{xAlign:size.xAlign||options.xAlign||determineXAlign(chart,options,size,yAlign),yAlign};} -function alignX(size,xAlign){let{x,width}=size;if(xAlign==='right'){x-=width;}else if(xAlign==='center'){x-=(width/2);} -return x;} -function alignY(size,yAlign,paddingAndSize){let{y,height}=size;if(yAlign==='top'){y+=paddingAndSize;}else if(yAlign==='bottom'){y-=height+paddingAndSize;}else{y-=(height/2);} -return y;} -function getBackgroundPoint(options,size,alignment,chart){const{caretSize,caretPadding,cornerRadius}=options;const{xAlign,yAlign}=alignment;const paddingAndSize=caretSize+caretPadding;const{topLeft,topRight,bottomLeft,bottomRight}=toTRBLCorners(cornerRadius);let x=alignX(size,xAlign);const y=alignY(size,yAlign,paddingAndSize);if(yAlign==='center'){if(xAlign==='left'){x+=paddingAndSize;}else if(xAlign==='right'){x-=paddingAndSize;}}else if(xAlign==='left'){x-=Math.max(topLeft,bottomLeft)+caretSize;}else if(xAlign==='right'){x+=Math.max(topRight,bottomRight)+caretSize;} -return{x:_limitValue(x,0,chart.width-size.width),y:_limitValue(y,0,chart.height-size.height)};} -function getAlignedX(tooltip,align,options){const padding=toPadding(options.padding);return align==='center'?tooltip.x+tooltip.width/2:align==='right'?tooltip.x+tooltip.width-padding.right:tooltip.x+padding.left;} -function getBeforeAfterBodyLines(callback){return pushOrConcat([],splitNewlines(callback));} -function createTooltipContext(parent,tooltip,tooltipItems){return createContext(parent,{tooltip,tooltipItems,type:'tooltip'});} -function overrideCallbacks(callbacks,context){const override=context&&context.dataset&&context.dataset.tooltip&&context.dataset.tooltip.callbacks;return override?callbacks.override(override):callbacks;} -class Tooltip extends Element{constructor(config){super();this.opacity=0;this._active=[];this._eventPosition=undefined;this._size=undefined;this._cachedAnimations=undefined;this._tooltipItems=[];this.$animations=undefined;this.$context=undefined;this.chart=config.chart||config._chart;this._chart=this.chart;this.options=config.options;this.dataPoints=undefined;this.title=undefined;this.beforeBody=undefined;this.body=undefined;this.afterBody=undefined;this.footer=undefined;this.xAlign=undefined;this.yAlign=undefined;this.x=undefined;this.y=undefined;this.height=undefined;this.width=undefined;this.caretX=undefined;this.caretY=undefined;this.labelColors=undefined;this.labelPointStyles=undefined;this.labelTextColors=undefined;} -initialize(options){this.options=options;this._cachedAnimations=undefined;this.$context=undefined;} -_resolveAnimations(){const cached=this._cachedAnimations;if(cached){return cached;} -const chart=this.chart;const options=this.options.setContext(this.getContext());const opts=options.enabled&&chart.options.animation&&options.animations;const animations=new Animations(this.chart,opts);if(opts._cacheable){this._cachedAnimations=Object.freeze(animations);} -return animations;} -getContext(){return this.$context||(this.$context=createTooltipContext(this.chart.getContext(),this,this._tooltipItems));} -getTitle(context,options){const{callbacks}=options;const beforeTitle=callbacks.beforeTitle.apply(this,[context]);const title=callbacks.title.apply(this,[context]);const afterTitle=callbacks.afterTitle.apply(this,[context]);let lines=[];lines=pushOrConcat(lines,splitNewlines(beforeTitle));lines=pushOrConcat(lines,splitNewlines(title));lines=pushOrConcat(lines,splitNewlines(afterTitle));return lines;} -getBeforeBody(tooltipItems,options){return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this,[tooltipItems]));} -getBody(tooltipItems,options){const{callbacks}=options;const bodyItems=[];each(tooltipItems,(context)=>{const bodyItem={before:[],lines:[],after:[]};const scoped=overrideCallbacks(callbacks,context);pushOrConcat(bodyItem.before,splitNewlines(scoped.beforeLabel.call(this,context)));pushOrConcat(bodyItem.lines,scoped.label.call(this,context));pushOrConcat(bodyItem.after,splitNewlines(scoped.afterLabel.call(this,context)));bodyItems.push(bodyItem);});return bodyItems;} -getAfterBody(tooltipItems,options){return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this,[tooltipItems]));} -getFooter(tooltipItems,options){const{callbacks}=options;const beforeFooter=callbacks.beforeFooter.apply(this,[tooltipItems]);const footer=callbacks.footer.apply(this,[tooltipItems]);const afterFooter=callbacks.afterFooter.apply(this,[tooltipItems]);let lines=[];lines=pushOrConcat(lines,splitNewlines(beforeFooter));lines=pushOrConcat(lines,splitNewlines(footer));lines=pushOrConcat(lines,splitNewlines(afterFooter));return lines;} -_createItems(options){const active=this._active;const data=this.chart.data;const labelColors=[];const labelPointStyles=[];const labelTextColors=[];let tooltipItems=[];let i,len;for(i=0,len=active.length;ioptions.filter(element,index,array,data));} -if(options.itemSort){tooltipItems=tooltipItems.sort((a,b)=>options.itemSort(a,b,data));} -each(tooltipItems,(context)=>{const scoped=overrideCallbacks(options.callbacks,context);labelColors.push(scoped.labelColor.call(this,context));labelPointStyles.push(scoped.labelPointStyle.call(this,context));labelTextColors.push(scoped.labelTextColor.call(this,context));});this.labelColors=labelColors;this.labelPointStyles=labelPointStyles;this.labelTextColors=labelTextColors;this.dataPoints=tooltipItems;return tooltipItems;} -update(changed,replay){const options=this.options.setContext(this.getContext());const active=this._active;let properties;let tooltipItems=[];if(!active.length){if(this.opacity!==0){properties={opacity:0};}}else{const position=positioners[options.position].call(this,active,this._eventPosition);tooltipItems=this._createItems(options);this.title=this.getTitle(tooltipItems,options);this.beforeBody=this.getBeforeBody(tooltipItems,options);this.body=this.getBody(tooltipItems,options);this.afterBody=this.getAfterBody(tooltipItems,options);this.footer=this.getFooter(tooltipItems,options);const size=this._size=getTooltipSize(this,options);const positionAndSize=Object.assign({},position,size);const alignment=determineAlignment(this.chart,options,positionAndSize);const backgroundPoint=getBackgroundPoint(options,positionAndSize,alignment,this.chart);this.xAlign=alignment.xAlign;this.yAlign=alignment.yAlign;properties={opacity:1,x:backgroundPoint.x,y:backgroundPoint.y,width:size.width,height:size.height,caretX:position.x,caretY:position.y};} -this._tooltipItems=tooltipItems;this.$context=undefined;if(properties){this._resolveAnimations().update(this,properties);} -if(changed&&options.external){options.external.call(this,{chart:this.chart,tooltip:this,replay});}} -drawCaret(tooltipPoint,ctx,size,options){const caretPosition=this.getCaretPosition(tooltipPoint,size,options);ctx.lineTo(caretPosition.x1,caretPosition.y1);ctx.lineTo(caretPosition.x2,caretPosition.y2);ctx.lineTo(caretPosition.x3,caretPosition.y3);} -getCaretPosition(tooltipPoint,size,options){const{xAlign,yAlign}=this;const{caretSize,cornerRadius}=options;const{topLeft,topRight,bottomLeft,bottomRight}=toTRBLCorners(cornerRadius);const{x:ptX,y:ptY}=tooltipPoint;const{width,height}=size;let x1,x2,x3,y1,y2,y3;if(yAlign==='center'){y2=ptY+(height/2);if(xAlign==='left'){x1=ptX;x2=x1-caretSize;y1=y2+caretSize;y3=y2-caretSize;}else{x1=ptX+width;x2=x1+caretSize;y1=y2-caretSize;y3=y2+caretSize;} -x3=x1;}else{if(xAlign==='left'){x2=ptX+Math.max(topLeft,bottomLeft)+(caretSize);}else if(xAlign==='right'){x2=ptX+width-Math.max(topRight,bottomRight)-caretSize;}else{x2=this.caretX;} -if(yAlign==='top'){y1=ptY;y2=y1-caretSize;x1=x2-caretSize;x3=x2+caretSize;}else{y1=ptY+height;y2=y1+caretSize;x1=x2+caretSize;x3=x2-caretSize;} -y3=y1;} -return{x1,x2,x3,y1,y2,y3};} -drawTitle(pt,ctx,options){const title=this.title;const length=title.length;let titleFont,titleSpacing,i;if(length){const rtlHelper=getRtlAdapter(options.rtl,this.x,this.width);pt.x=getAlignedX(this,options.titleAlign,options);ctx.textAlign=rtlHelper.textAlign(options.titleAlign);ctx.textBaseline='middle';titleFont=toFont(options.titleFont);titleSpacing=options.titleSpacing;ctx.fillStyle=options.titleColor;ctx.font=titleFont.string;for(i=0;iv!==0)){ctx.beginPath();ctx.fillStyle=options.multiKeyBackground;addRoundedRectPath(ctx,{x:outerX,y:colorY,w:boxWidth,h:boxHeight,radius:borderRadius,});ctx.fill();ctx.stroke();ctx.fillStyle=labelColors.backgroundColor;ctx.beginPath();addRoundedRectPath(ctx,{x:innerX,y:colorY+1,w:boxWidth-2,h:boxHeight-2,radius:borderRadius,});ctx.fill();}else{ctx.fillStyle=options.multiKeyBackground;ctx.fillRect(outerX,colorY,boxWidth,boxHeight);ctx.strokeRect(outerX,colorY,boxWidth,boxHeight);ctx.fillStyle=labelColors.backgroundColor;ctx.fillRect(innerX,colorY+1,boxWidth-2,boxHeight-2);}} -ctx.fillStyle=this.labelTextColors[i];} -drawBody(pt,ctx,options){const{body}=this;const{bodySpacing,bodyAlign,displayColors,boxHeight,boxWidth,boxPadding}=options;const bodyFont=toFont(options.bodyFont);let bodyLineHeight=bodyFont.lineHeight;let xLinePadding=0;const rtlHelper=getRtlAdapter(options.rtl,this.x,this.width);const fillLineOfText=function(line){ctx.fillText(line,rtlHelper.x(pt.x+xLinePadding),pt.y+bodyLineHeight/2);pt.y+=bodyLineHeight+bodySpacing;};const bodyAlignForCalculation=rtlHelper.textAlign(bodyAlign);let bodyItem,textColor,lines,i,j,ilen,jlen;ctx.textAlign=bodyAlign;ctx.textBaseline='middle';ctx.font=bodyFont.string;pt.x=getAlignedX(this,bodyAlignForCalculation,options);ctx.fillStyle=options.bodyColor;each(this.beforeBody,fillLineOfText);xLinePadding=displayColors&&bodyAlignForCalculation!=='right'?bodyAlign==='center'?(boxWidth/2+boxPadding):(boxWidth+2+boxPadding):0;for(i=0,ilen=body.length;i0){ctx.stroke();}} -_updateAnimationTarget(options){const chart=this.chart;const anims=this.$animations;const animX=anims&&anims.x;const animY=anims&&anims.y;if(animX||animY){const position=positioners[options.position].call(this,this._active,this._eventPosition);if(!position){return;} -const size=this._size=getTooltipSize(this,options);const positionAndSize=Object.assign({},position,this._size);const alignment=determineAlignment(chart,options,positionAndSize);const point=getBackgroundPoint(options,positionAndSize,alignment,chart);if(animX._to!==point.x||animY._to!==point.y){this.xAlign=alignment.xAlign;this.yAlign=alignment.yAlign;this.width=size.width;this.height=size.height;this.caretX=position.x;this.caretY=position.y;this._resolveAnimations().update(this,point);}}} -_willRender(){return!!this.opacity;} -draw(ctx){const options=this.options.setContext(this.getContext());let opacity=this.opacity;if(!opacity){return;} -this._updateAnimationTarget(options);const tooltipSize={width:this.width,height:this.height};const pt={x:this.x,y:this.y};opacity=Math.abs(opacity)<1e-3?0:opacity;const padding=toPadding(options.padding);const hasTooltipContent=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;if(options.enabled&&hasTooltipContent){ctx.save();ctx.globalAlpha=opacity;this.drawBackground(pt,ctx,tooltipSize,options);overrideTextDirection(ctx,options.textDirection);pt.y+=padding.top;this.drawTitle(pt,ctx,options);this.drawBody(pt,ctx,options);this.drawFooter(pt,ctx,options);restoreTextDirection(ctx,options.textDirection);ctx.restore();}} -getActiveElements(){return this._active||[];} -setActiveElements(activeElements,eventPosition){const lastActive=this._active;const active=activeElements.map(({datasetIndex,index})=>{const meta=this.chart.getDatasetMeta(datasetIndex);if(!meta){throw new Error('Cannot find a dataset at index '+datasetIndex);} -return{datasetIndex,element:meta.data[index],index,};});const changed=!_elementsEqual(lastActive,active);const positionChanged=this._positionChanged(active,eventPosition);if(changed||positionChanged){this._active=active;this._eventPosition=eventPosition;this._ignoreReplayEvents=true;this.update(true);}} -handleEvent(e,replay,inChartArea=true){if(replay&&this._ignoreReplayEvents){return false;} -this._ignoreReplayEvents=false;const options=this.options;const lastActive=this._active||[];const active=this._getActiveElements(e,lastActive,replay,inChartArea);const positionChanged=this._positionChanged(active,e);const changed=replay||!_elementsEqual(active,lastActive)||positionChanged;if(changed){this._active=active;if(options.enabled||options.external){this._eventPosition={x:e.x,y:e.y};this.update(true,replay);}} -return changed;} -_getActiveElements(e,lastActive,replay,inChartArea){const options=this.options;if(e.type==='mouseout'){return[];} -if(!inChartArea){return lastActive;} -const active=this.chart.getElementsAtEventForMode(e,options.mode,options,replay);if(options.reverse){active.reverse();} -return active;} -_positionChanged(active,e){const{caretX,caretY,options}=this;const position=positioners[options.position].call(this,active,e);return position!==false&&(caretX!==position.x||caretY!==position.y);}} -Tooltip.positioners=positioners;var plugin_tooltip={id:'tooltip',_element:Tooltip,positioners,afterInit(chart,_args,options){if(options){chart.tooltip=new Tooltip({chart,options});}},beforeUpdate(chart,_args,options){if(chart.tooltip){chart.tooltip.initialize(options);}},reset(chart,_args,options){if(chart.tooltip){chart.tooltip.initialize(options);}},afterDraw(chart){const tooltip=chart.tooltip;if(tooltip&&tooltip._willRender()){const args={tooltip};if(chart.notifyPlugins('beforeTooltipDraw',args)===false){return;} -tooltip.draw(chart.ctx);chart.notifyPlugins('afterTooltipDraw',args);}},afterEvent(chart,args){if(chart.tooltip){const useFinalPosition=args.replay;if(chart.tooltip.handleEvent(args.event,useFinalPosition,args.inChartArea)){args.changed=true;}}},defaults:{enabled:true,external:null,position:'average',backgroundColor:'rgba(0,0,0,0.8)',titleColor:'#fff',titleFont:{weight:'bold',},titleSpacing:2,titleMarginBottom:6,titleAlign:'left',bodyColor:'#fff',bodySpacing:2,bodyFont:{},bodyAlign:'left',footerColor:'#fff',footerSpacing:2,footerMarginTop:6,footerFont:{weight:'bold',},footerAlign:'left',padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(ctx,opts)=>opts.bodyFont.size,boxWidth:(ctx,opts)=>opts.bodyFont.size,multiKeyBackground:'#fff',displayColors:true,boxPadding:0,borderColor:'rgba(0,0,0,0)',borderWidth:0,animation:{duration:400,easing:'easeOutQuart',},animations:{numbers:{type:'number',properties:['x','y','width','height','caretX','caretY'],},opacity:{easing:'linear',duration:200}},callbacks:{beforeTitle:noop,title(tooltipItems){if(tooltipItems.length>0){const item=tooltipItems[0];const labels=item.chart.data.labels;const labelCount=labels?labels.length:0;if(this&&this.options&&this.options.mode==='dataset'){return item.dataset.label||'';}else if(item.label){return item.label;}else if(labelCount>0&&item.dataIndexname!=='filter'&&name!=='itemSort'&&name!=='external',_indexable:false,callbacks:{_scriptable:false,_indexable:false,},animation:{_fallback:false},animations:{_fallback:'animation'}},additionalOptionScopes:['interaction']};var plugins=Object.freeze({__proto__:null,Decimation:plugin_decimation,Filler:index,Legend:plugin_legend,SubTitle:plugin_subtitle,Title:plugin_title,Tooltip:plugin_tooltip});const addIfString=(labels,raw,index,addedLabels)=>{if(typeof raw==='string'){index=labels.push(raw)-1;addedLabels.unshift({index,label:raw});}else if(isNaN(raw)){index=null;} -return index;};function findOrAddLabel(labels,raw,index,addedLabels){const first=labels.indexOf(raw);if(first===-1){return addIfString(labels,raw,index,addedLabels);} -const last=labels.lastIndexOf(raw);return first!==last?index:first;} -const validIndex=(index,max)=>index===null?null:_limitValue(Math.round(index),0,max);class CategoryScale extends Scale{constructor(cfg){super(cfg);this._startValue=undefined;this._valueRange=0;this._addedLabels=[];} -init(scaleOptions){const added=this._addedLabels;if(added.length){const labels=this.getLabels();for(const{index,label}of added){if(labels[index]===label){labels.splice(index,1);}} -this._addedLabels=[];} -super.init(scaleOptions);} -parse(raw,index){if(isNullOrUndef(raw)){return null;} -const labels=this.getLabels();index=isFinite(index)&&labels[index]===raw?index:findOrAddLabel(labels,raw,valueOrDefault(index,raw),this._addedLabels);return validIndex(index,labels.length-1);} -determineDataLimits(){const{minDefined,maxDefined}=this.getUserBounds();let{min,max}=this.getMinMax(true);if(this.options.bounds==='ticks'){if(!minDefined){min=0;} -if(!maxDefined){max=this.getLabels().length-1;}} -this.min=min;this.max=max;} -buildTicks(){const min=this.min;const max=this.max;const offset=this.options.offset;const ticks=[];let labels=this.getLabels();labels=(min===0&&max===labels.length-1)?labels:labels.slice(min,max+1);this._valueRange=Math.max(labels.length-(offset?0:1),1);this._startValue=this.min-(offset?0.5:0);for(let value=min;value<=max;value++){ticks.push({value});} -return ticks;} -getLabelForValue(value){const labels=this.getLabels();if(value>=0&&valueticks.length-1){return null;} -return this.getPixelForValue(ticks[index].value);} -getValueForPixel(pixel){return Math.round(this._startValue+this.getDecimalForPixel(pixel)*this._valueRange);} -getBasePixel(){return this.bottom;}} -CategoryScale.id='category';CategoryScale.defaults={ticks:{callback:CategoryScale.prototype.getLabelForValue}};function generateTicks$1(generationOptions,dataRange){const ticks=[];const MIN_SPACING=1e-14;const{bounds,step,min,max,precision,count,maxTicks,maxDigits,includeBounds}=generationOptions;const unit=step||1;const maxSpaces=maxTicks-1;const{min:rmin,max:rmax}=dataRange;const minDefined=!isNullOrUndef(min);const maxDefined=!isNullOrUndef(max);const countDefined=!isNullOrUndef(count);const minSpacing=(rmax-rmin)/(maxDigits+1);let spacing=niceNum((rmax-rmin)/maxSpaces/unit)*unit;let factor,niceMin,niceMax,numSpaces;if(spacingmaxSpaces){spacing=niceNum(numSpaces*spacing/maxSpaces/unit)*unit;} -if(!isNullOrUndef(precision)){factor=Math.pow(10,precision);spacing=Math.ceil(spacing*factor)/factor;} -if(bounds==='ticks'){niceMin=Math.floor(rmin/spacing)*spacing;niceMax=Math.ceil(rmax/spacing)*spacing;}else{niceMin=rmin;niceMax=rmax;} -if(minDefined&&maxDefined&&step&&almostWhole((max-min)/step,spacing/1000)){numSpaces=Math.round(Math.min((max-min)/spacing,maxTicks));spacing=(max-min)/numSpaces;niceMin=min;niceMax=max;}else if(countDefined){niceMin=minDefined?min:niceMin;niceMax=maxDefined?max:niceMax;numSpaces=count-1;spacing=(niceMax-niceMin)/numSpaces;}else{numSpaces=(niceMax-niceMin)/spacing;if(almostEquals(numSpaces,Math.round(numSpaces),spacing/1000)){numSpaces=Math.round(numSpaces);}else{numSpaces=Math.ceil(numSpaces);}} -const decimalPlaces=Math.max(_decimalPlaces(spacing),_decimalPlaces(niceMin));factor=Math.pow(10,isNullOrUndef(precision)?decimalPlaces:precision);niceMin=Math.round(niceMin*factor)/factor;niceMax=Math.round(niceMax*factor)/factor;let j=0;if(minDefined){if(includeBounds&&niceMin!==min){ticks.push({value:min});if(niceMin(min=minDefined?min:v);const setMax=v=>(max=maxDefined?max:v);if(beginAtZero){const minSign=sign(min);const maxSign=sign(max);if(minSign<0&&maxSign<0){setMax(0);}else if(minSign>0&&maxSign>0){setMin(0);}} -if(min===max){let offset=1;if(max>=Number.MAX_SAFE_INTEGER||min<=Number.MIN_SAFE_INTEGER){offset=Math.abs(max*0.05);} -setMax(max+offset);if(!beginAtZero){setMin(min-offset);}} -this.min=min;this.max=max;} -getTickLimit(){const tickOpts=this.options.ticks;let{maxTicksLimit,stepSize}=tickOpts;let maxTicks;if(stepSize){maxTicks=Math.ceil(this.max/stepSize)-Math.floor(this.min/stepSize)+1;if(maxTicks>1000){console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);maxTicks=1000;}}else{maxTicks=this.computeTickLimit();maxTicksLimit=maxTicksLimit||11;} -if(maxTicksLimit){maxTicks=Math.min(maxTicksLimit,maxTicks);} -return maxTicks;} -computeTickLimit(){return Number.POSITIVE_INFINITY;} -buildTicks(){const opts=this.options;const tickOpts=opts.ticks;let maxTicks=this.getTickLimit();maxTicks=Math.max(2,maxTicks);const numericGeneratorOptions={maxTicks,bounds:opts.bounds,min:opts.min,max:opts.max,precision:tickOpts.precision,step:tickOpts.stepSize,count:tickOpts.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:tickOpts.minRotation||0,includeBounds:tickOpts.includeBounds!==false};const dataRange=this._range||this;const ticks=generateTicks$1(numericGeneratorOptions,dataRange);if(opts.bounds==='ticks'){_setMinAndMaxByKey(ticks,this,'value');} -if(opts.reverse){ticks.reverse();this.start=this.max;this.end=this.min;}else{this.start=this.min;this.end=this.max;} -return ticks;} -configure(){const ticks=this.ticks;let start=this.min;let end=this.max;super.configure();if(this.options.offset&&ticks.length){const offset=(end-start)/Math.max(ticks.length-1,1)/2;start-=offset;end+=offset;} -this._startValue=start;this._endValue=end;this._valueRange=end-start;} -getLabelForValue(value){return formatNumber(value,this.chart.options.locale,this.options.ticks.format);}} -class LinearScale extends LinearScaleBase{determineDataLimits(){const{min,max}=this.getMinMax(true);this.min=isNumberFinite(min)?min:0;this.max=isNumberFinite(max)?max:1;this.handleTickRangeOptions();} -computeTickLimit(){const horizontal=this.isHorizontal();const length=horizontal?this.width:this.height;const minRotation=toRadians(this.options.ticks.minRotation);const ratio=(horizontal?Math.sin(minRotation):Math.cos(minRotation))||0.001;const tickFont=this._resolveTickFontOptions(0);return Math.ceil(length/Math.min(40,tickFont.lineHeight/ratio));} -getPixelForValue(value){return value===null?NaN:this.getPixelForDecimal((value-this._startValue)/this._valueRange);} -getValueForPixel(pixel){return this._startValue+this.getDecimalForPixel(pixel)*this._valueRange;}} -LinearScale.id='linear';LinearScale.defaults={ticks:{callback:Ticks.formatters.numeric}};function isMajor(tickVal){const remain=tickVal/(Math.pow(10,Math.floor(log10(tickVal))));return remain===1;} -function generateTicks(generationOptions,dataRange){const endExp=Math.floor(log10(dataRange.max));const endSignificand=Math.ceil(dataRange.max/Math.pow(10,endExp));const ticks=[];let tickVal=finiteOrDefault(generationOptions.min,Math.pow(10,Math.floor(log10(dataRange.min))));let exp=Math.floor(log10(tickVal));let significand=Math.floor(tickVal/Math.pow(10,exp));let precision=exp<0?Math.pow(10,Math.abs(exp)):1;do{ticks.push({value:tickVal,major:isMajor(tickVal)});++significand;if(significand===10){significand=1;++exp;precision=exp>=0?1:precision;} -tickVal=Math.round(significand*Math.pow(10,exp)*precision)/precision;}while(exp0?value:null;} -determineDataLimits(){const{min,max}=this.getMinMax(true);this.min=isNumberFinite(min)?Math.max(0,min):null;this.max=isNumberFinite(max)?Math.max(0,max):null;if(this.options.beginAtZero){this._zero=true;} -this.handleTickRangeOptions();} -handleTickRangeOptions(){const{minDefined,maxDefined}=this.getUserBounds();let min=this.min;let max=this.max;const setMin=v=>(min=minDefined?min:v);const setMax=v=>(max=maxDefined?max:v);const exp=(v,m)=>Math.pow(10,Math.floor(log10(v))+m);if(min===max){if(min<=0){setMin(1);setMax(10);}else{setMin(exp(min,-1));setMax(exp(max,+1));}} -if(min<=0){setMin(exp(max,-1));} -if(max<=0){setMax(exp(min,+1));} -if(this._zero&&this.min!==this._suggestedMin&&min===exp(this.min,0)){setMin(exp(min,-1));} -this.min=min;this.max=max;} -buildTicks(){const opts=this.options;const generationOptions={min:this._userMin,max:this._userMax};const ticks=generateTicks(generationOptions,this);if(opts.bounds==='ticks'){_setMinAndMaxByKey(ticks,this,'value');} -if(opts.reverse){ticks.reverse();this.start=this.max;this.end=this.min;}else{this.start=this.min;this.end=this.max;} -return ticks;} -getLabelForValue(value){return value===undefined?'0':formatNumber(value,this.chart.options.locale,this.options.ticks.format);} -configure(){const start=this.min;super.configure();this._startValue=log10(start);this._valueRange=log10(this.max)-log10(start);} -getPixelForValue(value){if(value===undefined||value===0){value=this.min;} -if(value===null||isNaN(value)){return NaN;} -return this.getPixelForDecimal(value===this.min?0:(log10(value)-this._startValue)/this._valueRange);} -getValueForPixel(pixel){const decimal=this.getDecimalForPixel(pixel);return Math.pow(10,this._startValue+decimal*this._valueRange);}} -LogarithmicScale.id='logarithmic';LogarithmicScale.defaults={ticks:{callback:Ticks.formatters.logarithmic,major:{enabled:true}}};function getTickBackdropHeight(opts){const tickOpts=opts.ticks;if(tickOpts.display&&opts.display){const padding=toPadding(tickOpts.backdropPadding);return valueOrDefault(tickOpts.font&&tickOpts.font.size,defaults.font.size)+padding.height;} -return 0;} -function measureLabelSize(ctx,font,label){label=isArray(label)?label:[label];return{w:_longestText(ctx,font.string,label),h:label.length*font.lineHeight};} -function determineLimits(angle,pos,size,min,max){if(angle===min||angle===max){return{start:pos-(size/2),end:pos+(size/2)};}else if(anglemax){return{start:pos-size,end:pos};} -return{start:pos,end:pos+size};} -function fitWithPointLabels(scale){const orig={l:scale.left+scale._padding.left,r:scale.right-scale._padding.right,t:scale.top+scale._padding.top,b:scale.bottom-scale._padding.bottom};const limits=Object.assign({},orig);const labelSizes=[];const padding=[];const valueCount=scale._pointLabels.length;const pointLabelOpts=scale.options.pointLabels;const additionalAngle=pointLabelOpts.centerPointLabels?PI/valueCount:0;for(let i=0;iorig.r){x=(hLimits.end-orig.r)/sin;limits.r=Math.max(limits.r,orig.r+x);} -if(vLimits.startorig.b){y=(vLimits.end-orig.b)/cos;limits.b=Math.max(limits.b,orig.b+y);}} -function buildPointLabelItems(scale,labelSizes,padding){const items=[];const valueCount=scale._pointLabels.length;const opts=scale.options;const extra=getTickBackdropHeight(opts)/2;const outerDistance=scale.drawingArea;const additionalAngle=opts.pointLabels.centerPointLabels?PI/valueCount:0;for(let i=0;i270||angle<90){y-=h;} -return y;} -function drawPointLabels(scale,labelCount){const{ctx,options:{pointLabels}}=scale;for(let i=labelCount-1;i>=0;i--){const optsAtIndex=pointLabels.setContext(scale.getPointLabelContext(i));const plFont=toFont(optsAtIndex.font);const{x,y,textAlign,left,top,right,bottom}=scale._pointLabelItems[i];const{backdropColor}=optsAtIndex;if(!isNullOrUndef(backdropColor)){const borderRadius=toTRBLCorners(optsAtIndex.borderRadius);const padding=toPadding(optsAtIndex.backdropPadding);ctx.fillStyle=backdropColor;const backdropLeft=left-padding.left;const backdropTop=top-padding.top;const backdropWidth=right-left+padding.width;const backdropHeight=bottom-top+padding.height;if(Object.values(borderRadius).some(v=>v!==0)){ctx.beginPath();addRoundedRectPath(ctx,{x:backdropLeft,y:backdropTop,w:backdropWidth,h:backdropHeight,radius:borderRadius,});ctx.fill();}else{ctx.fillRect(backdropLeft,backdropTop,backdropWidth,backdropHeight);}} -renderText(ctx,scale._pointLabels[i],x,y+(plFont.lineHeight/2),plFont,{color:optsAtIndex.color,textAlign:textAlign,textBaseline:'middle'});}} -function pathRadiusLine(scale,radius,circular,labelCount){const{ctx}=scale;if(circular){ctx.arc(scale.xCenter,scale.yCenter,radius,0,TAU);}else{let pointPosition=scale.getPointPosition(0,radius);ctx.moveTo(pointPosition.x,pointPosition.y);for(let i=1;i{const label=callback(this.options.pointLabels.callback,[value,index],this);return label||label===0?label:'';}).filter((v,i)=>this.chart.getDataVisibility(i));} -fit(){const opts=this.options;if(opts.display&&opts.pointLabels.display){fitWithPointLabels(this);}else{this.setCenterPoint(0,0,0,0);}} -setCenterPoint(leftMovement,rightMovement,topMovement,bottomMovement){this.xCenter+=Math.floor((leftMovement-rightMovement)/2);this.yCenter+=Math.floor((topMovement-bottomMovement)/2);this.drawingArea-=Math.min(this.drawingArea/2,Math.max(leftMovement,rightMovement,topMovement,bottomMovement));} -getIndexAngle(index){const angleMultiplier=TAU/(this._pointLabels.length||1);const startAngle=this.options.startAngle||0;return _normalizeAngle(index*angleMultiplier+toRadians(startAngle));} -getDistanceFromCenterForValue(value){if(isNullOrUndef(value)){return NaN;} -const scalingFactor=this.drawingArea/(this.max-this.min);if(this.options.reverse){return(this.max-value)*scalingFactor;} -return(value-this.min)*scalingFactor;} -getValueForDistanceFromCenter(distance){if(isNullOrUndef(distance)){return NaN;} -const scaledDistance=distance/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-scaledDistance:this.min+scaledDistance;} -getPointLabelContext(index){const pointLabels=this._pointLabels||[];if(index>=0&&index{if(index!==0){offset=this.getDistanceFromCenterForValue(tick.value);const optsAtIndex=grid.setContext(this.getContext(index-1));drawRadiusLine(this,optsAtIndex,offset,labelCount);}});} -if(angleLines.display){ctx.save();for(i=labelCount-1;i>=0;i--){const optsAtIndex=angleLines.setContext(this.getPointLabelContext(i));const{color,lineWidth}=optsAtIndex;if(!lineWidth||!color){continue;} -ctx.lineWidth=lineWidth;ctx.strokeStyle=color;ctx.setLineDash(optsAtIndex.borderDash);ctx.lineDashOffset=optsAtIndex.borderDashOffset;offset=this.getDistanceFromCenterForValue(opts.ticks.reverse?this.min:this.max);position=this.getPointPosition(i,offset);ctx.beginPath();ctx.moveTo(this.xCenter,this.yCenter);ctx.lineTo(position.x,position.y);ctx.stroke();} -ctx.restore();}} -drawBorder(){} -drawLabels(){const ctx=this.ctx;const opts=this.options;const tickOpts=opts.ticks;if(!tickOpts.display){return;} -const startAngle=this.getIndexAngle(0);let offset,width;ctx.save();ctx.translate(this.xCenter,this.yCenter);ctx.rotate(startAngle);ctx.textAlign='center';ctx.textBaseline='middle';this.ticks.forEach((tick,index)=>{if(index===0&&!opts.reverse){return;} -const optsAtIndex=tickOpts.setContext(this.getContext(index));const tickFont=toFont(optsAtIndex.font);offset=this.getDistanceFromCenterForValue(this.ticks[index].value);if(optsAtIndex.showLabelBackdrop){ctx.font=tickFont.string;width=ctx.measureText(tick.label).width;ctx.fillStyle=optsAtIndex.backdropColor;const padding=toPadding(optsAtIndex.backdropPadding);ctx.fillRect(-width/2-padding.left,-offset-tickFont.size/2-padding.top,width+padding.width,tickFont.size+padding.height);} -renderText(ctx,tick.label,0,-offset,tickFont,{color:optsAtIndex.color,});});ctx.restore();} -drawTitle(){}} -RadialLinearScale.id='radialLinear';RadialLinearScale.defaults={display:true,animate:true,position:'chartArea',angleLines:{display:true,lineWidth:1,borderDash:[],borderDashOffset:0.0},grid:{circular:false},startAngle:0,ticks:{showLabelBackdrop:true,callback:Ticks.formatters.numeric},pointLabels:{backdropColor:undefined,backdropPadding:2,display:true,font:{size:10},callback(label){return label;},padding:5,centerPointLabels:false}};RadialLinearScale.defaultRoutes={'angleLines.color':'borderColor','pointLabels.color':'color','ticks.color':'color'};RadialLinearScale.descriptors={angleLines:{_fallback:'grid'}};const INTERVALS={millisecond:{common:true,size:1,steps:1000},second:{common:true,size:1000,steps:60},minute:{common:true,size:60000,steps:60},hour:{common:true,size:3600000,steps:24},day:{common:true,size:86400000,steps:30},week:{common:false,size:604800000,steps:4},month:{common:true,size:2.628e9,steps:12},quarter:{common:false,size:7.884e9,steps:4},year:{common:true,size:3.154e10}};const UNITS=(Object.keys(INTERVALS));function sorter(a,b){return a-b;} -function parse(scale,input){if(isNullOrUndef(input)){return null;} -const adapter=scale._adapter;const{parser,round,isoWeekday}=scale._parseOpts;let value=input;if(typeof parser==='function'){value=parser(value);} -if(!isNumberFinite(value)){value=typeof parser==='string'?adapter.parse(value,parser):adapter.parse(value);} -if(value===null){return null;} -if(round){value=round==='week'&&(isNumber(isoWeekday)||isoWeekday===true)?adapter.startOf(value,'isoWeek',isoWeekday):adapter.startOf(value,round);} -return+value;} -function determineUnitForAutoTicks(minUnit,min,max,capacity){const ilen=UNITS.length;for(let i=UNITS.indexOf(minUnit);i=UNITS.indexOf(minUnit);i--){const unit=UNITS[i];if(INTERVALS[unit].common&&scale._adapter.diff(max,min,unit)>=numTicks-1){return unit;}} -return UNITS[minUnit?UNITS.indexOf(minUnit):0];} -function determineMajorUnit(unit){for(let i=UNITS.indexOf(unit)+1,ilen=UNITS.length;i=time?timestamps[lo]:timestamps[hi];ticks[timestamp]=true;}} -function setMajorTicks(scale,ticks,map,majorUnit){const adapter=scale._adapter;const first=+adapter.startOf(ticks[0].value,majorUnit);const last=ticks[ticks.length-1].value;let major,index;for(major=first;major<=last;major=+adapter.add(major,1,majorUnit)){index=map[major];if(index>=0){ticks[index].major=true;}} -return ticks;} -function ticksFromTimestamps(scale,values,majorUnit){const ticks=[];const map={};const ilen=values.length;let i,value;for(i=0;i+tick.value));}} -initOffsets(timestamps){let start=0;let end=0;let first,last;if(this.options.offset&×tamps.length){first=this.getDecimalForValue(timestamps[0]);if(timestamps.length===1){start=1-first;}else{start=(this.getDecimalForValue(timestamps[1])-first)/2;} -last=this.getDecimalForValue(timestamps[timestamps.length-1]);if(timestamps.length===1){end=last;}else{end=(last-this.getDecimalForValue(timestamps[timestamps.length-2]))/2;}} -const limit=timestamps.length<3?0.5:0.25;start=_limitValue(start,0,limit);end=_limitValue(end,0,limit);this._offsets={start,end,factor:1/(start+1+end)};} -_generate(){const adapter=this._adapter;const min=this.min;const max=this.max;const options=this.options;const timeOpts=options.time;const minor=timeOpts.unit||determineUnitForAutoTicks(timeOpts.minUnit,min,max,this._getLabelCapacity(min));const stepSize=valueOrDefault(timeOpts.stepSize,1);const weekday=minor==='week'?timeOpts.isoWeekday:false;const hasWeekday=isNumber(weekday)||weekday===true;const ticks={};let first=min;let time,count;if(hasWeekday){first=+adapter.startOf(first,'isoWeek',weekday);} -first=+adapter.startOf(first,hasWeekday?'day':minor);if(adapter.diff(max,min,minor)>100000*stepSize){throw new Error(min+' and '+max+' are too far apart with stepSize of '+stepSize+' '+minor);} -const timestamps=options.ticks.source==='data'&&this.getDataTimestamps();for(time=first,count=0;timea-b).map(x=>+x);} -getLabelForValue(value){const adapter=this._adapter;const timeOpts=this.options.time;if(timeOpts.tooltipFormat){return adapter.format(value,timeOpts.tooltipFormat);} -return adapter.format(value,timeOpts.displayFormats.datetime);} -_tickFormatFunction(time,index,ticks,format){const options=this.options;const formats=options.time.displayFormats;const unit=this._unit;const majorUnit=this._majorUnit;const minorFormat=unit&&formats[unit];const majorFormat=majorUnit&&formats[majorUnit];const tick=ticks[index];const major=majorUnit&&majorFormat&&tick&&tick.major;const label=this._adapter.format(time,format||(major?majorFormat:minorFormat));const formatter=options.ticks.callback;return formatter?callback(formatter,[label,index,ticks],this):label;} -generateTickLabels(ticks){let i,ilen,tick;for(i=0,ilen=ticks.length;i0?capacity:1;} -getDataTimestamps(){let timestamps=this._cache.data||[];let i,ilen;if(timestamps.length){return timestamps;} -const metas=this.getMatchingVisibleMetas();if(this._normalized&&metas.length){return(this._cache.data=metas[0].controller.getAllParsedValues(this));} -for(i=0,ilen=metas.length;i=table[lo].pos&&val<=table[hi].pos){({lo,hi}=_lookupByKey(table,'pos',val));} -({pos:prevSource,time:prevTarget}=table[lo]);({pos:nextSource,time:nextTarget}=table[hi]);}else{if(val>=table[lo].time&&val<=table[hi].time){({lo,hi}=_lookupByKey(table,'time',val));} -({time:prevSource,pos:prevTarget}=table[lo]);({time:nextSource,pos:nextTarget}=table[hi]);} -const span=nextSource-prevSource;return span?prevTarget+(nextTarget-prevTarget)*(val-prevSource)/span:prevTarget;} -class TimeSeriesScale extends TimeScale{constructor(props){super(props);this._table=[];this._minPos=undefined;this._tableRange=undefined;} -initOffsets(){const timestamps=this._getTimestampsForTable();const table=this._table=this.buildLookupTable(timestamps);this._minPos=interpolate(table,this.min);this._tableRange=interpolate(table,this.max)-this._minPos;super.initOffsets(timestamps);} -buildLookupTable(timestamps){const{min,max}=this;const items=[];const table=[];let i,ilen,prev,curr,next;for(i=0,ilen=timestamps.length;i=min&&curr<=max){items.push(curr);}} -if(items.length<2){return[{time:min,pos:0},{time:max,pos:1}];} -for(i=0,ilen=items.length;i",GT:">",Gt:"\u226b",gtdot:"\u22d7",gtlPar:"\u2995",gtquest:"\u2a7c",gtrapprox:"\u2a86",gtrarr:"\u2978",gtrdot:"\u22d7",gtreqless:"\u22db",gtreqqless:"\u2a8c",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\ufe00",gvnE:"\u2269\ufe00",Hacek:"\u02c7",hairsp:"\u200a",half:"\xbd",hamilt:"\u210b",HARDcy:"\u042a",hardcy:"\u044a",harrcir:"\u2948",harr:"\u2194",hArr:"\u21d4",harrw:"\u21ad",Hat:"^",hbar:"\u210f",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22b9",hfr:"\ud835\udd25",Hfr:"\u210c",HilbertSpace:"\u210b",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21ff",homtht:"\u223b",hookleftarrow:"\u21a9",hookrightarrow:"\u21aa",hopf:"\ud835\udd59",Hopf:"\u210d",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\ud835\udcbd",Hscr:"\u210b",hslash:"\u210f",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224e",HumpEqual:"\u224f",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xcd",iacute:"\xed",ic:"\u2063",Icirc:"\xce",icirc:"\xee",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xa1",iff:"\u21d4",ifr:"\ud835\udd26",Ifr:"\u2111",Igrave:"\xcc",igrave:"\xec",ii:"\u2148",iiiint:"\u2a0c",iiint:"\u222d",iinfin:"\u29dc",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012a",imacr:"\u012b",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22b7",imped:"\u01b5",Implies:"\u21d2",incare:"\u2105",in:"\u2208",infin:"\u221e",infintie:"\u29dd",inodot:"\u0131",intcal:"\u22ba",int:"\u222b",Int:"\u222c",integers:"\u2124",Integral:"\u222b",intercal:"\u22ba",Intersection:"\u22c2",intlarhk:"\u2a17",intprod:"\u2a3c",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012e",iogon:"\u012f",Iopf:"\ud835\udd40",iopf:"\ud835\udd5a",Iota:"\u0399",iota:"\u03b9",iprod:"\u2a3c",iquest:"\xbf",iscr:"\ud835\udcbe",Iscr:"\u2110",isin:"\u2208",isindot:"\u22f5",isinE:"\u22f9",isins:"\u22f4",isinsv:"\u22f3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xcf",iuml:"\xef",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\ud835\udd0d",jfr:"\ud835\udd27",jmath:"\u0237",Jopf:"\ud835\udd41",jopf:"\ud835\udd5b",Jscr:"\ud835\udca5",jscr:"\ud835\udcbf",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039a",kappa:"\u03ba",kappav:"\u03f0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041a",kcy:"\u043a",Kfr:"\ud835\udd0e",kfr:"\ud835\udd28",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040c",kjcy:"\u045c",Kopf:"\ud835\udd42",kopf:"\ud835\udd5c",Kscr:"\ud835\udca6",kscr:"\ud835\udcc0",lAarr:"\u21da",Lacute:"\u0139",lacute:"\u013a",laemptyv:"\u29b4",lagran:"\u2112",Lambda:"\u039b",lambda:"\u03bb",lang:"\u27e8",Lang:"\u27ea",langd:"\u2991",langle:"\u27e8",lap:"\u2a85",Laplacetrf:"\u2112",laquo:"\xab",larrb:"\u21e4",larrbfs:"\u291f",larr:"\u2190",Larr:"\u219e",lArr:"\u21d0",larrfs:"\u291d",larrhk:"\u21a9",larrlp:"\u21ab",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21a2",latail:"\u2919",lAtail:"\u291b",lat:"\u2aab",late:"\u2aad",lates:"\u2aad\ufe00",lbarr:"\u290c",lBarr:"\u290e",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298b",lbrksld:"\u298f",lbrkslu:"\u298d",Lcaron:"\u013d",lcaron:"\u013e",Lcedil:"\u013b",lcedil:"\u013c",lceil:"\u2308",lcub:"{",Lcy:"\u041b",lcy:"\u043b",ldca:"\u2936",ldquo:"\u201c",ldquor:"\u201e",ldrdhar:"\u2967",ldrushar:"\u294b",ldsh:"\u21b2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27e8",LeftArrowBar:"\u21e4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21d0",LeftArrowRightArrow:"\u21c6",leftarrowtail:"\u21a2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27e6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21c3",LeftFloor:"\u230a",leftharpoondown:"\u21bd",leftharpoonup:"\u21bc",leftleftarrows:"\u21c7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21d4",leftrightarrows:"\u21c6",leftrightharpoons:"\u21cb",leftrightsquigarrow:"\u21ad",LeftRightVector:"\u294e",LeftTeeArrow:"\u21a4",LeftTee:"\u22a3",LeftTeeVector:"\u295a",leftthreetimes:"\u22cb",LeftTriangleBar:"\u29cf",LeftTriangle:"\u22b2",LeftTriangleEqual:"\u22b4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21bf",LeftVectorBar:"\u2952",LeftVector:"\u21bc",lEg:"\u2a8b",leg:"\u22da",leq:"\u2264",leqq:"\u2266",leqslant:"\u2a7d",lescc:"\u2aa8",les:"\u2a7d",lesdot:"\u2a7f",lesdoto:"\u2a81",lesdotor:"\u2a83",lesg:"\u22da\ufe00",lesges:"\u2a93",lessapprox:"\u2a85",lessdot:"\u22d6",lesseqgtr:"\u22da",lesseqqgtr:"\u2a8b",LessEqualGreater:"\u22da",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2aa1",lesssim:"\u2272",LessSlantEqual:"\u2a7d",LessTilde:"\u2272",lfisht:"\u297c",lfloor:"\u230a",Lfr:"\ud835\udd0f",lfr:"\ud835\udd29",lg:"\u2276",lgE:"\u2a91",lHar:"\u2962",lhard:"\u21bd",lharu:"\u21bc",lharul:"\u296a",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21c7",ll:"\u226a",Ll:"\u22d8",llcorner:"\u231e",Lleftarrow:"\u21da",llhard:"\u296b",lltri:"\u25fa",Lmidot:"\u013f",lmidot:"\u0140",lmoustache:"\u23b0",lmoust:"\u23b0",lnap:"\u2a89",lnapprox:"\u2a89",lne:"\u2a87",lnE:"\u2268",lneq:"\u2a87",lneqq:"\u2268",lnsim:"\u22e6",loang:"\u27ec",loarr:"\u21fd",lobrk:"\u27e6",longleftarrow:"\u27f5",LongLeftArrow:"\u27f5",Longleftarrow:"\u27f8",longleftrightarrow:"\u27f7",LongLeftRightArrow:"\u27f7",Longleftrightarrow:"\u27fa",longmapsto:"\u27fc",longrightarrow:"\u27f6",LongRightArrow:"\u27f6",Longrightarrow:"\u27f9",looparrowleft:"\u21ab",looparrowright:"\u21ac",lopar:"\u2985",Lopf:"\ud835\udd43",lopf:"\ud835\udd5d",loplus:"\u2a2d",lotimes:"\u2a34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25ca",lozenge:"\u25ca",lozf:"\u29eb",lpar:"(",lparlt:"\u2993",lrarr:"\u21c6",lrcorner:"\u231f",lrhar:"\u21cb",lrhard:"\u296d",lrm:"\u200e",lrtri:"\u22bf",lsaquo:"\u2039",lscr:"\ud835\udcc1",Lscr:"\u2112",lsh:"\u21b0",Lsh:"\u21b0",lsim:"\u2272",lsime:"\u2a8d",lsimg:"\u2a8f",lsqb:"[",lsquo:"\u2018",lsquor:"\u201a",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2aa6",ltcir:"\u2a79",lt:"<",LT:"<",Lt:"\u226a",ltdot:"\u22d6",lthree:"\u22cb",ltimes:"\u22c9",ltlarr:"\u2976",ltquest:"\u2a7b",ltri:"\u25c3",ltrie:"\u22b4",ltrif:"\u25c2",ltrPar:"\u2996",lurdshar:"\u294a",luruhar:"\u2966",lvertneqq:"\u2268\ufe00",lvnE:"\u2268\ufe00",macr:"\xaf",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21a6",mapsto:"\u21a6",mapstodown:"\u21a7",mapstoleft:"\u21a4",mapstoup:"\u21a5",marker:"\u25ae",mcomma:"\u2a29",Mcy:"\u041c",mcy:"\u043c",mdash:"\u2014",mDDot:"\u223a",measuredangle:"\u2221",MediumSpace:"\u205f",Mellintrf:"\u2133",Mfr:"\ud835\udd10",mfr:"\ud835\udd2a",mho:"\u2127",micro:"\xb5",midast:"*",midcir:"\u2af0",mid:"\u2223",middot:"\xb7",minusb:"\u229f",minus:"\u2212",minusd:"\u2238",minusdu:"\u2a2a",MinusPlus:"\u2213",mlcp:"\u2adb",mldr:"\u2026",mnplus:"\u2213",models:"\u22a7",Mopf:"\ud835\udd44",mopf:"\ud835\udd5e",mp:"\u2213",mscr:"\ud835\udcc2",Mscr:"\u2133",mstpos:"\u223e",Mu:"\u039c",mu:"\u03bc",multimap:"\u22b8",mumap:"\u22b8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20d2",nap:"\u2249",napE:"\u2a70\u0338",napid:"\u224b\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266e",naturals:"\u2115",natur:"\u266e",nbsp:"\xa0",nbump:"\u224e\u0338",nbumpe:"\u224f\u0338",ncap:"\u2a43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2a6d\u0338",ncup:"\u2a42",Ncy:"\u041d",ncy:"\u043d",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21d7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200b",NegativeThickSpace:"\u200b",NegativeThinSpace:"\u200b",NegativeVeryThinSpace:"\u200b",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226b",NestedLessLess:"\u226a",NewLine:"\n",nexist:"\u2204",nexists:"\u2204",Nfr:"\ud835\udd11",nfr:"\ud835\udd2b",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2a7e\u0338",nges:"\u2a7e\u0338",nGg:"\u22d9\u0338",ngsim:"\u2275",nGt:"\u226b\u20d2",ngt:"\u226f",ngtr:"\u226f",nGtv:"\u226b\u0338",nharr:"\u21ae",nhArr:"\u21ce",nhpar:"\u2af2",ni:"\u220b",nis:"\u22fc",nisd:"\u22fa",niv:"\u220b",NJcy:"\u040a",njcy:"\u045a",nlarr:"\u219a",nlArr:"\u21cd",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219a",nLeftarrow:"\u21cd",nleftrightarrow:"\u21ae",nLeftrightarrow:"\u21ce",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2a7d\u0338",nles:"\u2a7d\u0338",nless:"\u226e",nLl:"\u22d8\u0338",nlsim:"\u2274",nLt:"\u226a\u20d2",nlt:"\u226e",nltri:"\u22ea",nltrie:"\u22ec",nLtv:"\u226a\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xa0",nopf:"\ud835\udd5f",Nopf:"\u2115",Not:"\u2aec",not:"\xac",NotCongruent:"\u2262",NotCupCap:"\u226d",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226f",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226b\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2a7e\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224e\u0338",NotHumpEqual:"\u224f\u0338",notin:"\u2209",notindot:"\u22f5\u0338",notinE:"\u22f9\u0338",notinva:"\u2209",notinvb:"\u22f7",notinvc:"\u22f6",NotLeftTriangleBar:"\u29cf\u0338",NotLeftTriangle:"\u22ea",NotLeftTriangleEqual:"\u22ec",NotLess:"\u226e",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226a\u0338",NotLessSlantEqual:"\u2a7d\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2aa2\u0338",NotNestedLessLess:"\u2aa1\u0338",notni:"\u220c",notniva:"\u220c",notnivb:"\u22fe",notnivc:"\u22fd",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2aaf\u0338",NotPrecedesSlantEqual:"\u22e0",NotReverseElement:"\u220c",NotRightTriangleBar:"\u29d0\u0338",NotRightTriangle:"\u22eb",NotRightTriangleEqual:"\u22ed",NotSquareSubset:"\u228f\u0338",NotSquareSubsetEqual:"\u22e2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22e3",NotSubset:"\u2282\u20d2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2ab0\u0338",NotSucceedsSlantEqual:"\u22e1",NotSucceedsTilde:"\u227f\u0338",NotSuperset:"\u2283\u20d2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2afd\u20e5",npart:"\u2202\u0338",npolint:"\u2a14",npr:"\u2280",nprcue:"\u22e0",nprec:"\u2280",npreceq:"\u2aaf\u0338",npre:"\u2aaf\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219b",nrArr:"\u21cf",nrarrw:"\u219d\u0338",nrightarrow:"\u219b",nRightarrow:"\u21cf",nrtri:"\u22eb",nrtrie:"\u22ed",nsc:"\u2281",nsccue:"\u22e1",nsce:"\u2ab0\u0338",Nscr:"\ud835\udca9",nscr:"\ud835\udcc3",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22e2",nsqsupe:"\u22e3",nsub:"\u2284",nsubE:"\u2ac5\u0338",nsube:"\u2288",nsubset:"\u2282\u20d2",nsubseteq:"\u2288",nsubseteqq:"\u2ac5\u0338",nsucc:"\u2281",nsucceq:"\u2ab0\u0338",nsup:"\u2285",nsupE:"\u2ac6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20d2",nsupseteq:"\u2289",nsupseteqq:"\u2ac6\u0338",ntgl:"\u2279",Ntilde:"\xd1",ntilde:"\xf1",ntlg:"\u2278",ntriangleleft:"\u22ea",ntrianglelefteq:"\u22ec",ntriangleright:"\u22eb",ntrianglerighteq:"\u22ed",Nu:"\u039d",nu:"\u03bd",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224d\u20d2",nvdash:"\u22ac",nvDash:"\u22ad",nVdash:"\u22ae",nVDash:"\u22af",nvge:"\u2265\u20d2",nvgt:">\u20d2",nvHarr:"\u2904",nvinfin:"\u29de",nvlArr:"\u2902",nvle:"\u2264\u20d2",nvlt:"<\u20d2",nvltrie:"\u22b4\u20d2",nvrArr:"\u2903",nvrtrie:"\u22b5\u20d2",nvsim:"\u223c\u20d2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21d6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xd3",oacute:"\xf3",oast:"\u229b",Ocirc:"\xd4",ocirc:"\xf4",ocir:"\u229a",Ocy:"\u041e",ocy:"\u043e",odash:"\u229d",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2a38",odot:"\u2299",odsold:"\u29bc",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29bf",Ofr:"\ud835\udd12",ofr:"\ud835\udd2c",ogon:"\u02db",Ograve:"\xd2",ograve:"\xf2",ogt:"\u29c1",ohbar:"\u29b5",ohm:"\u03a9",oint:"\u222e",olarr:"\u21ba",olcir:"\u29be",olcross:"\u29bb",oline:"\u203e",olt:"\u29c0",Omacr:"\u014c",omacr:"\u014d",Omega:"\u03a9",omega:"\u03c9",Omicron:"\u039f",omicron:"\u03bf",omid:"\u29b6",ominus:"\u2296",Oopf:"\ud835\udd46",oopf:"\ud835\udd60",opar:"\u29b7",OpenCurlyDoubleQuote:"\u201c",OpenCurlyQuote:"\u2018",operp:"\u29b9",oplus:"\u2295",orarr:"\u21bb",Or:"\u2a54",or:"\u2228",ord:"\u2a5d",order:"\u2134",orderof:"\u2134",ordf:"\xaa",ordm:"\xba",origof:"\u22b6",oror:"\u2a56",orslope:"\u2a57",orv:"\u2a5b",oS:"\u24c8",Oscr:"\ud835\udcaa",oscr:"\u2134",Oslash:"\xd8",oslash:"\xf8",osol:"\u2298",Otilde:"\xd5",otilde:"\xf5",otimesas:"\u2a36",Otimes:"\u2a37",otimes:"\u2297",Ouml:"\xd6",ouml:"\xf6",ovbar:"\u233d",OverBar:"\u203e",OverBrace:"\u23de",OverBracket:"\u23b4",OverParenthesis:"\u23dc",para:"\xb6",parallel:"\u2225",par:"\u2225",parsim:"\u2af3",parsl:"\u2afd",part:"\u2202",PartialD:"\u2202",Pcy:"\u041f",pcy:"\u043f",percnt:"%",period:".",permil:"\u2030",perp:"\u22a5",pertenk:"\u2031",Pfr:"\ud835\udd13",pfr:"\ud835\udd2d",Phi:"\u03a6",phi:"\u03c6",phiv:"\u03d5",phmmat:"\u2133",phone:"\u260e",Pi:"\u03a0",pi:"\u03c0",pitchfork:"\u22d4",piv:"\u03d6",planck:"\u210f",planckh:"\u210e",plankv:"\u210f",plusacir:"\u2a23",plusb:"\u229e",pluscir:"\u2a22",plus:"+",plusdo:"\u2214",plusdu:"\u2a25",pluse:"\u2a72",PlusMinus:"\xb1",plusmn:"\xb1",plussim:"\u2a26",plustwo:"\u2a27",pm:"\xb1",Poincareplane:"\u210c",pointint:"\u2a15",popf:"\ud835\udd61",Popf:"\u2119",pound:"\xa3",prap:"\u2ab7",Pr:"\u2abb",pr:"\u227a",prcue:"\u227c",precapprox:"\u2ab7",prec:"\u227a",preccurlyeq:"\u227c",Precedes:"\u227a",PrecedesEqual:"\u2aaf",PrecedesSlantEqual:"\u227c",PrecedesTilde:"\u227e",preceq:"\u2aaf",precnapprox:"\u2ab9",precneqq:"\u2ab5",precnsim:"\u22e8",pre:"\u2aaf",prE:"\u2ab3",precsim:"\u227e",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2ab9",prnE:"\u2ab5",prnsim:"\u22e8",prod:"\u220f",Product:"\u220f",profalar:"\u232e",profline:"\u2312",profsurf:"\u2313",prop:"\u221d",Proportional:"\u221d",Proportion:"\u2237",propto:"\u221d",prsim:"\u227e",prurel:"\u22b0",Pscr:"\ud835\udcab",pscr:"\ud835\udcc5",Psi:"\u03a8",psi:"\u03c8",puncsp:"\u2008",Qfr:"\ud835\udd14",qfr:"\ud835\udd2e",qint:"\u2a0c",qopf:"\ud835\udd62",Qopf:"\u211a",qprime:"\u2057",Qscr:"\ud835\udcac",qscr:"\ud835\udcc6",quaternions:"\u210d",quatint:"\u2a16",quest:"?",questeq:"\u225f",quot:'"',QUOT:'"',rAarr:"\u21db",race:"\u223d\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221a",raemptyv:"\u29b3",rang:"\u27e9",Rang:"\u27eb",rangd:"\u2992",range:"\u29a5",rangle:"\u27e9",raquo:"\xbb",rarrap:"\u2975",rarrb:"\u21e5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21a0",rArr:"\u21d2",rarrfs:"\u291e",rarrhk:"\u21aa",rarrlp:"\u21ac",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21a3",rarrw:"\u219d",ratail:"\u291a",rAtail:"\u291c",ratio:"\u2236",rationals:"\u211a",rbarr:"\u290d",rBarr:"\u290f",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298c",rbrksld:"\u298e",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201d",rdquor:"\u201d",rdsh:"\u21b3",real:"\u211c",realine:"\u211b",realpart:"\u211c",reals:"\u211d",Re:"\u211c",rect:"\u25ad",reg:"\xae",REG:"\xae",ReverseElement:"\u220b",ReverseEquilibrium:"\u21cb",ReverseUpEquilibrium:"\u296f",rfisht:"\u297d",rfloor:"\u230b",rfr:"\ud835\udd2f",Rfr:"\u211c",rHar:"\u2964",rhard:"\u21c1",rharu:"\u21c0",rharul:"\u296c",Rho:"\u03a1",rho:"\u03c1",rhov:"\u03f1",RightAngleBracket:"\u27e9",RightArrowBar:"\u21e5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21d2",RightArrowLeftArrow:"\u21c4",rightarrowtail:"\u21a3",RightCeiling:"\u2309",RightDoubleBracket:"\u27e7",RightDownTeeVector:"\u295d",RightDownVectorBar:"\u2955",RightDownVector:"\u21c2",RightFloor:"\u230b",rightharpoondown:"\u21c1",rightharpoonup:"\u21c0",rightleftarrows:"\u21c4",rightleftharpoons:"\u21cc",rightrightarrows:"\u21c9",rightsquigarrow:"\u219d",RightTeeArrow:"\u21a6",RightTee:"\u22a2",RightTeeVector:"\u295b",rightthreetimes:"\u22cc",RightTriangleBar:"\u29d0",RightTriangle:"\u22b3",RightTriangleEqual:"\u22b5",RightUpDownVector:"\u294f",RightUpTeeVector:"\u295c",RightUpVectorBar:"\u2954",RightUpVector:"\u21be",RightVectorBar:"\u2953",RightVector:"\u21c0",ring:"\u02da",risingdotseq:"\u2253",rlarr:"\u21c4",rlhar:"\u21cc",rlm:"\u200f",rmoustache:"\u23b1",rmoust:"\u23b1",rnmid:"\u2aee",roang:"\u27ed",roarr:"\u21fe",robrk:"\u27e7",ropar:"\u2986",ropf:"\ud835\udd63",Ropf:"\u211d",roplus:"\u2a2e",rotimes:"\u2a35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2a12",rrarr:"\u21c9",Rrightarrow:"\u21db",rsaquo:"\u203a",rscr:"\ud835\udcc7",Rscr:"\u211b",rsh:"\u21b1",Rsh:"\u21b1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22cc",rtimes:"\u22ca",rtri:"\u25b9",rtrie:"\u22b5",rtrif:"\u25b8",rtriltri:"\u29ce",RuleDelayed:"\u29f4",ruluhar:"\u2968",rx:"\u211e",Sacute:"\u015a",sacute:"\u015b",sbquo:"\u201a",scap:"\u2ab8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2abc",sc:"\u227b",sccue:"\u227d",sce:"\u2ab0",scE:"\u2ab4",Scedil:"\u015e",scedil:"\u015f",Scirc:"\u015c",scirc:"\u015d",scnap:"\u2aba",scnE:"\u2ab6",scnsim:"\u22e9",scpolint:"\u2a13",scsim:"\u227f",Scy:"\u0421",scy:"\u0441",sdotb:"\u22a1",sdot:"\u22c5",sdote:"\u2a66",searhk:"\u2925",searr:"\u2198",seArr:"\u21d8",searrow:"\u2198",sect:"\xa7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\ud835\udd16",sfr:"\ud835\udd30",sfrown:"\u2322",sharp:"\u266f",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xad",Sigma:"\u03a3",sigma:"\u03c3",sigmaf:"\u03c2",sigmav:"\u03c2",sim:"\u223c",simdot:"\u2a6a",sime:"\u2243",simeq:"\u2243",simg:"\u2a9e",simgE:"\u2aa0",siml:"\u2a9d",simlE:"\u2a9f",simne:"\u2246",simplus:"\u2a24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2a33",smeparsl:"\u29e4",smid:"\u2223",smile:"\u2323",smt:"\u2aaa",smte:"\u2aac",smtes:"\u2aac\ufe00",SOFTcy:"\u042c",softcy:"\u044c",solbar:"\u233f",solb:"\u29c4",sol:"/",Sopf:"\ud835\udd4a",sopf:"\ud835\udd64",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\ufe00",sqcup:"\u2294",sqcups:"\u2294\ufe00",Sqrt:"\u221a",sqsub:"\u228f",sqsube:"\u2291",sqsubset:"\u228f",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25a1",Square:"\u25a1",SquareIntersection:"\u2293",SquareSubset:"\u228f",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25aa",squ:"\u25a1",squf:"\u25aa",srarr:"\u2192",Sscr:"\ud835\udcae",sscr:"\ud835\udcc8",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22c6",Star:"\u22c6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03f5",straightphi:"\u03d5",strns:"\xaf",sub:"\u2282",Sub:"\u22d0",subdot:"\u2abd",subE:"\u2ac5",sube:"\u2286",subedot:"\u2ac3",submult:"\u2ac1",subnE:"\u2acb",subne:"\u228a",subplus:"\u2abf",subrarr:"\u2979",subset:"\u2282",Subset:"\u22d0",subseteq:"\u2286",subseteqq:"\u2ac5",SubsetEqual:"\u2286",subsetneq:"\u228a",subsetneqq:"\u2acb",subsim:"\u2ac7",subsub:"\u2ad5",subsup:"\u2ad3",succapprox:"\u2ab8",succ:"\u227b",succcurlyeq:"\u227d",Succeeds:"\u227b",SucceedsEqual:"\u2ab0",SucceedsSlantEqual:"\u227d",SucceedsTilde:"\u227f",succeq:"\u2ab0",succnapprox:"\u2aba",succneqq:"\u2ab6",succnsim:"\u22e9",succsim:"\u227f",SuchThat:"\u220b",sum:"\u2211",Sum:"\u2211",sung:"\u266a",sup1:"\xb9",sup2:"\xb2",sup3:"\xb3",sup:"\u2283",Sup:"\u22d1",supdot:"\u2abe",supdsub:"\u2ad8",supE:"\u2ac6",supe:"\u2287",supedot:"\u2ac4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27c9",suphsub:"\u2ad7",suplarr:"\u297b",supmult:"\u2ac2",supnE:"\u2acc",supne:"\u228b",supplus:"\u2ac0",supset:"\u2283",Supset:"\u22d1",supseteq:"\u2287",supseteqq:"\u2ac6",supsetneq:"\u228b",supsetneqq:"\u2acc",supsim:"\u2ac8",supsub:"\u2ad4",supsup:"\u2ad6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21d9",swarrow:"\u2199",swnwar:"\u292a",szlig:"\xdf",Tab:"\t",target:"\u2316",Tau:"\u03a4",tau:"\u03c4",tbrk:"\u23b4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20db",telrec:"\u2315",Tfr:"\ud835\udd17",tfr:"\ud835\udd31",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03b8",thetasym:"\u03d1",thetav:"\u03d1",thickapprox:"\u2248",thicksim:"\u223c",ThickSpace:"\u205f\u200a",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223c",THORN:"\xde",thorn:"\xfe",tilde:"\u02dc",Tilde:"\u223c",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2a31",timesb:"\u22a0",times:"\xd7",timesd:"\u2a30",tint:"\u222d",toea:"\u2928",topbot:"\u2336",topcir:"\u2af1",top:"\u22a4",Topf:"\ud835\udd4b",topf:"\ud835\udd65",topfork:"\u2ada",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25b5",triangledown:"\u25bf",triangleleft:"\u25c3",trianglelefteq:"\u22b4",triangleq:"\u225c",triangleright:"\u25b9",trianglerighteq:"\u22b5",tridot:"\u25ec",trie:"\u225c",triminus:"\u2a3a",TripleDot:"\u20db",triplus:"\u2a39",trisb:"\u29cd",tritime:"\u2a3b",trpezium:"\u23e2",Tscr:"\ud835\udcaf",tscr:"\ud835\udcc9",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040b",tshcy:"\u045b",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226c",twoheadleftarrow:"\u219e",twoheadrightarrow:"\u21a0",Uacute:"\xda",uacute:"\xfa",uarr:"\u2191",Uarr:"\u219f",uArr:"\u21d1",Uarrocir:"\u2949",Ubrcy:"\u040e",ubrcy:"\u045e",Ubreve:"\u016c",ubreve:"\u016d",Ucirc:"\xdb",ucirc:"\xfb",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21c5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296e",ufisht:"\u297e",Ufr:"\ud835\udd18",ufr:"\ud835\udd32",Ugrave:"\xd9",ugrave:"\xf9",uHar:"\u2963",uharl:"\u21bf",uharr:"\u21be",uhblk:"\u2580",ulcorn:"\u231c",ulcorner:"\u231c",ulcrop:"\u230f",ultri:"\u25f8",Umacr:"\u016a",umacr:"\u016b",uml:"\xa8",UnderBar:"_",UnderBrace:"\u23df",UnderBracket:"\u23b5",UnderParenthesis:"\u23dd",Union:"\u22c3",UnionPlus:"\u228e",Uogon:"\u0172",uogon:"\u0173",Uopf:"\ud835\udd4c",uopf:"\ud835\udd66",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21d1",UpArrowDownArrow:"\u21c5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21d5",UpEquilibrium:"\u296e",upharpoonleft:"\u21bf",upharpoonright:"\u21be",uplus:"\u228e",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03c5",Upsi:"\u03d2",upsih:"\u03d2",Upsilon:"\u03a5",upsilon:"\u03c5",UpTeeArrow:"\u21a5",UpTee:"\u22a5",upuparrows:"\u21c8",urcorn:"\u231d",urcorner:"\u231d",urcrop:"\u230e",Uring:"\u016e",uring:"\u016f",urtri:"\u25f9",Uscr:"\ud835\udcb0",uscr:"\ud835\udcca",utdot:"\u22f0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25b5",utrif:"\u25b4",uuarr:"\u21c8",Uuml:"\xdc",uuml:"\xfc",uwangle:"\u29a7",vangrt:"\u299c",varepsilon:"\u03f5",varkappa:"\u03f0",varnothing:"\u2205",varphi:"\u03d5",varpi:"\u03d6",varpropto:"\u221d",varr:"\u2195",vArr:"\u21d5",varrho:"\u03f1",varsigma:"\u03c2",varsubsetneq:"\u228a\ufe00",varsubsetneqq:"\u2acb\ufe00",varsupsetneq:"\u228b\ufe00",varsupsetneqq:"\u2acc\ufe00",vartheta:"\u03d1",vartriangleleft:"\u22b2",vartriangleright:"\u22b3",vBar:"\u2ae8",Vbar:"\u2aeb",vBarv:"\u2ae9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22a2",vDash:"\u22a8",Vdash:"\u22a9",VDash:"\u22ab",Vdashl:"\u2ae6",veebar:"\u22bb",vee:"\u2228",Vee:"\u22c1",veeeq:"\u225a",vellip:"\u22ee",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200a",Vfr:"\ud835\udd19",vfr:"\ud835\udd33",vltri:"\u22b2",vnsub:"\u2282\u20d2",vnsup:"\u2283\u20d2",Vopf:"\ud835\udd4d",vopf:"\ud835\udd67",vprop:"\u221d",vrtri:"\u22b3",Vscr:"\ud835\udcb1",vscr:"\ud835\udccb",vsubnE:"\u2acb\ufe00",vsubne:"\u228a\ufe00",vsupnE:"\u2acc\ufe00",vsupne:"\u228b\ufe00",Vvdash:"\u22aa",vzigzag:"\u299a",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2a5f",wedge:"\u2227",Wedge:"\u22c0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\ud835\udd1a",wfr:"\ud835\udd34",Wopf:"\ud835\udd4e",wopf:"\ud835\udd68",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\ud835\udcb2",wscr:"\ud835\udccc",xcap:"\u22c2",xcirc:"\u25ef",xcup:"\u22c3",xdtri:"\u25bd",Xfr:"\ud835\udd1b",xfr:"\ud835\udd35",xharr:"\u27f7",xhArr:"\u27fa",Xi:"\u039e",xi:"\u03be",xlarr:"\u27f5",xlArr:"\u27f8",xmap:"\u27fc",xnis:"\u22fb",xodot:"\u2a00",Xopf:"\ud835\udd4f",xopf:"\ud835\udd69",xoplus:"\u2a01",xotime:"\u2a02",xrarr:"\u27f6",xrArr:"\u27f9",Xscr:"\ud835\udcb3",xscr:"\ud835\udccd",xsqcup:"\u2a06",xuplus:"\u2a04",xutri:"\u25b3",xvee:"\u22c1",xwedge:"\u22c0",Yacute:"\xdd",yacute:"\xfd",YAcy:"\u042f",yacy:"\u044f",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042b",ycy:"\u044b",yen:"\xa5",Yfr:"\ud835\udd1c",yfr:"\ud835\udd36",YIcy:"\u0407",yicy:"\u0457",Yopf:"\ud835\udd50",yopf:"\ud835\udd6a",Yscr:"\ud835\udcb4",yscr:"\ud835\udcce",YUcy:"\u042e",yucy:"\u044e",yuml:"\xff",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017a",Zcaron:"\u017d",zcaron:"\u017e",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017b",zdot:"\u017c",zeetrf:"\u2128",ZeroWidthSpace:"\u200b",Zeta:"\u0396",zeta:"\u03b6",zfr:"\ud835\udd37",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21dd",zopf:"\ud835\udd6b",Zopf:"\u2124",Zscr:"\ud835\udcb5",zscr:"\ud835\udccf",zwj:"\u200d",zwnj:"\u200c"};var entities=require$$0;var regex$4=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;var encodeCache={};function getEncodeCache(exclude){var i,ch,cache=encodeCache[exclude];if(cache){return cache;} -cache=encodeCache[exclude]=[];for(i=0;i<128;i++){ch=String.fromCharCode(i);if(/^[0-9a-z]$/i.test(ch)){cache.push(ch);}else{cache.push("%"+("0"+i.toString(16).toUpperCase()).slice(-2));}} -for(i=0;i=55296&&code<=57343){if(code>=55296&&code<=56319&&i+1=56320&&nextCode<=57343){result+=encodeURIComponent(string[i]+string[i+1]);i++;continue;}} -result+="%EF%BF%BD";continue;} -result+=encodeURIComponent(string[i]);} -return result;} -encode$2.defaultChars=";/?:@&=+$,-_.!~*'()#";encode$2.componentChars="-_.!~*'()";var encode_1=encode$2;var decodeCache={};function getDecodeCache(exclude){var i,ch,cache=decodeCache[exclude];if(cache){return cache;} -cache=decodeCache[exclude]=[];for(i=0;i<128;i++){ch=String.fromCharCode(i);cache.push(ch);} -for(i=0;i=55296&&chr<=57343){result+="\ufffd\ufffd\ufffd";}else{result+=String.fromCharCode(chr);} -i+=6;continue;}} -if((b1&248)===240&&i+91114111){result+="\ufffd\ufffd\ufffd\ufffd";}else{chr-=65536;result+=String.fromCharCode(55296+(chr>>10),56320+(chr&1023));} -i+=9;continue;}} -result+="\ufffd";} -return result;}));} -decode$2.defaultChars=";/?:@&=+$,#";decode$2.componentChars="";var decode_1=decode$2;var format$1=function format(url){var result="";result+=url.protocol||"";result+=url.slashes?"//":"";result+=url.auth?url.auth+"@":"";if(url.hostname&&url.hostname.indexOf(":")!==-1){result+="["+url.hostname+"]";}else{result+=url.hostname||"";} -result+=url.port?":"+url.port:"";result+=url.pathname||"";result+=url.search||"";result+=url.hash||"";return result;};function Url(){this.protocol=null;this.slashes=null;this.auth=null;this.port=null;this.hostname=null;this.hash=null;this.search=null;this.pathname=null;} -var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,simplePathPattern=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,delims=["<",">",'"',"`"," ","\r","\n","\t"],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[+a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,hostlessProtocol={javascript:true,"javascript:":true},slashedProtocol={http:true,https:true,ftp:true,gopher:true,file:true,"http:":true,"https:":true,"ftp:":true,"gopher:":true,"file:":true};function urlParse(url,slashesDenoteHost){if(url&&url instanceof Url){return url;} -var u=new Url;u.parse(url,slashesDenoteHost);return u;} -Url.prototype.parse=function(url,slashesDenoteHost){var i,l,lowerProto,hec,slashes,rest=url;rest=rest.trim();if(!slashesDenoteHost&&url.split("#").length===1){var simplePath=simplePathPattern.exec(rest);if(simplePath){this.pathname=simplePath[1];if(simplePath[2]){this.search=simplePath[2];} -return this;}} -var proto=protocolPattern.exec(rest);if(proto){proto=proto[0];lowerProto=proto.toLowerCase();this.protocol=proto;rest=rest.substr(proto.length);} -if(slashesDenoteHost||proto||rest.match(/^\/\/[^@\/]+@[^@\/]+/)){slashes=rest.substr(0,2)==="//";if(slashes&&!(proto&&hostlessProtocol[proto])){rest=rest.substr(2);this.slashes=true;}} -if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){var hostEnd=-1;for(i=0;i127){newpart+="x";}else{newpart+=part[j];}} -if(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i);var notHost=hostparts.slice(i+1);var bit=part.match(hostnamePartStart);if(bit){validParts.push(bit[1]);notHost.unshift(bit[2]);} -if(notHost.length){rest=notHost.join(".")+rest;} -this.hostname=validParts.join(".");break;}}}} -if(this.hostname.length>hostnameMaxLen){this.hostname="";} -if(ipv6Hostname){this.hostname=this.hostname.substr(1,this.hostname.length-2);}} -var hash=rest.indexOf("#");if(hash!==-1){this.hash=rest.substr(hash);rest=rest.slice(0,hash);} -var qm=rest.indexOf("?");if(qm!==-1){this.search=rest.substr(qm);rest=rest.slice(0,qm);} -if(rest){this.pathname=rest;} -if(slashedProtocol[lowerProto]&&this.hostname&&!this.pathname){this.pathname="";} -return this;};Url.prototype.parseHost=function(host){var port=portPattern.exec(host);if(port){port=port[0];if(port!==":"){this.port=port.substr(1);} -host=host.substr(0,host.length-port.length);} -if(host){this.hostname=host;}};var parse$1=urlParse;var encode$1=encode_1;var decode$1=decode_1;var format=format$1;var parse=parse$1;var mdurl={encode:encode$1,decode:decode$1,format:format,parse:parse};var regex$3=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;var regex$2=/[\0-\x1F\x7F-\x9F]/;var regex$1=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;var regex=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;var Any=regex$3;var Cc=regex$2;var Cf=regex$1;var P=regex$4;var Z=regex;var uc_micro={Any:Any,Cc:Cc,Cf:Cf,P:P,Z:Z};var utils=createCommonjsModule((function(module,exports){function _class(obj){return Object.prototype.toString.call(obj);} -function isString(obj){return _class(obj)==="[object String]";} -var _hasOwnProperty=Object.prototype.hasOwnProperty;function has(object,key){return _hasOwnProperty.call(object,key);} -function assign(obj){var sources=Array.prototype.slice.call(arguments,1);sources.forEach((function(source){if(!source){return;} -if(typeof source!=="object"){throw new TypeError(source+"must be object");} -Object.keys(source).forEach((function(key){obj[key]=source[key];}));}));return obj;} -function arrayReplaceAt(src,pos,newElements){return[].concat(src.slice(0,pos),newElements,src.slice(pos+1));} -function isValidEntityCode(c){if(c>=55296&&c<=57343){return false;} -if(c>=64976&&c<=65007){return false;} -if((c&65535)===65535||(c&65535)===65534){return false;} -if(c>=0&&c<=8){return false;} -if(c===11){return false;} -if(c>=14&&c<=31){return false;} -if(c>=127&&c<=159){return false;} -if(c>1114111){return false;} -return true;} -function fromCodePoint(c){if(c>65535){c-=65536;var surrogate1=55296+(c>>10),surrogate2=56320+(c&1023);return String.fromCharCode(surrogate1,surrogate2);} -return String.fromCharCode(c);} -var UNESCAPE_MD_RE=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g;var ENTITY_RE=/&([a-z#][a-z0-9]{1,31});/gi;var UNESCAPE_ALL_RE=new RegExp(UNESCAPE_MD_RE.source+"|"+ENTITY_RE.source,"gi");var DIGITAL_ENTITY_TEST_RE=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function replaceEntityPattern(match,name){var code=0;if(has(entities,name)){return entities[name];} -if(name.charCodeAt(0)===35&&DIGITAL_ENTITY_TEST_RE.test(name)){code=name[1].toLowerCase()==="x"?parseInt(name.slice(2),16):parseInt(name.slice(1),10);if(isValidEntityCode(code)){return fromCodePoint(code);}} -return match;} -function unescapeMd(str){if(str.indexOf("\\")<0){return str;} -return str.replace(UNESCAPE_MD_RE,"$1");} -function unescapeAll(str){if(str.indexOf("\\")<0&&str.indexOf("&")<0){return str;} -return str.replace(UNESCAPE_ALL_RE,(function(match,escaped,entity){if(escaped){return escaped;} -return replaceEntityPattern(match,entity);}));} -var HTML_ESCAPE_TEST_RE=/[&<>"]/;var HTML_ESCAPE_REPLACE_RE=/[&<>"]/g;var HTML_REPLACEMENTS={"&":"&","<":"<",">":">",'"':"""};function replaceUnsafeChar(ch){return HTML_REPLACEMENTS[ch];} -function escapeHtml(str){if(HTML_ESCAPE_TEST_RE.test(str)){return str.replace(HTML_ESCAPE_REPLACE_RE,replaceUnsafeChar);} -return str;} -var REGEXP_ESCAPE_RE=/[.?*+^$[\]\\(){}|-]/g;function escapeRE(str){return str.replace(REGEXP_ESCAPE_RE,"\\$&");} -function isSpace(code){switch(code){case 9:case 32:return true;} -return false;} -function isWhiteSpace(code){if(code>=8192&&code<=8202){return true;} -switch(code){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return true;} -return false;} -function isPunctChar(ch){return regex$4.test(ch);} -function isMdAsciiPunct(ch){switch(ch){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return true;default:return false;}} -function normalizeReference(str){str=str.trim().replace(/\s+/g," ");if("\u1e9e".toLowerCase()==="\u1e7e"){str=str.replace(/\u1e9e/g,"\xdf");} -return str.toLowerCase().toUpperCase();} -exports.lib={};exports.lib.mdurl=mdurl;exports.lib.ucmicro=uc_micro;exports.assign=assign;exports.isString=isString;exports.has=has;exports.unescapeMd=unescapeMd;exports.unescapeAll=unescapeAll;exports.isValidEntityCode=isValidEntityCode;exports.fromCodePoint=fromCodePoint;exports.escapeHtml=escapeHtml;exports.arrayReplaceAt=arrayReplaceAt;exports.isSpace=isSpace;exports.isWhiteSpace=isWhiteSpace;exports.isMdAsciiPunct=isMdAsciiPunct;exports.isPunctChar=isPunctChar;exports.escapeRE=escapeRE;exports.normalizeReference=normalizeReference;}));var parse_link_label=function parseLinkLabel(state,start,disableNested){var level,found,marker,prevPos,labelEnd=-1,max=state.posMax,oldPos=state.pos;state.pos=start+1;level=1;while(state.pos32){return result;}} -if(code===41){if(level===0){break;} -level--;} -pos++;} -if(start===pos){return result;} -if(level!==0){return result;} -result.str=unescapeAll$2(str.slice(start,pos));result.lines=lines;result.pos=pos;result.ok=true;return result;};var unescapeAll$1=utils.unescapeAll;var parse_link_title=function parseLinkTitle(str,pos,max){var code,marker,lines=0,start=pos,result={ok:false,pos:0,lines:0,str:""};if(pos>=max){return result;} -marker=str.charCodeAt(pos);if(marker!==34&&marker!==39&&marker!==40){return result;} -pos++;if(marker===40){marker=41;} -while(pos"+escapeHtml(tokens[idx].content)+"";};default_rules.code_block=function(tokens,idx,options,env,slf){var token=tokens[idx];return""+escapeHtml(tokens[idx].content)+"\n";};default_rules.fence=function(tokens,idx,options,env,slf){var token=tokens[idx],info=token.info?unescapeAll(token.info).trim():"",langName="",langAttrs="",highlighted,i,arr,tmpAttrs,tmpToken;if(info){arr=info.split(/(\s+)/g);langName=arr[0];langAttrs=arr.slice(2).join("");} -if(options.highlight){highlighted=options.highlight(token.content,langName,langAttrs)||escapeHtml(token.content);}else{highlighted=escapeHtml(token.content);} -if(highlighted.indexOf(""+highlighted+"\n";} -return"
"+highlighted+"
\n";};default_rules.image=function(tokens,idx,options,env,slf){var token=tokens[idx];token.attrs[token.attrIndex("alt")][1]=slf.renderInlineAsText(token.children,options,env);return slf.renderToken(tokens,idx,options);};default_rules.hardbreak=function(tokens,idx,options){return options.xhtmlOut?"
\n":"
\n";};default_rules.softbreak=function(tokens,idx,options){return options.breaks?options.xhtmlOut?"
\n":"
\n":"\n";};default_rules.text=function(tokens,idx){return escapeHtml(tokens[idx].content);};default_rules.html_block=function(tokens,idx){return tokens[idx].content;};default_rules.html_inline=function(tokens,idx){return tokens[idx].content;};function Renderer(){this.rules=assign$1({},default_rules);} -Renderer.prototype.renderAttrs=function renderAttrs(token){var i,l,result;if(!token.attrs){return"";} -result="";for(i=0,l=token.attrs.length;i\n":">";return result;};Renderer.prototype.renderInline=function(tokens,options,env){var type,result="",rules=this.rules;for(var i=0,len=tokens.length;i\s]/i.test(str);} -function isLinkClose$1(str){return/^<\/a\s*>/i.test(str);} -var linkify$1=function linkify(state){var i,j,l,tokens,token,currentToken,nodes,ln,text,pos,lastPos,level,htmlLinkLevel,url,fullUrl,urlText,blockTokens=state.tokens,links;if(!state.md.options.linkify){return;} -for(j=0,l=blockTokens.length;j=0;i--){currentToken=tokens[i];if(currentToken.type==="link_close"){i--;while(tokens[i].level!==currentToken.level&&tokens[i].type!=="link_open"){i--;} -continue;} -if(currentToken.type==="html_inline"){if(isLinkOpen$1(currentToken.content)&&htmlLinkLevel>0){htmlLinkLevel--;} -if(isLinkClose$1(currentToken.content)){htmlLinkLevel++;}} -if(htmlLinkLevel>0){continue;} -if(currentToken.type==="text"&&state.md.linkify.test(currentToken.content)){text=currentToken.content;links=state.md.linkify.match(text);nodes=[];level=currentToken.level;lastPos=0;if(links.length>0&&links[0].index===0&&i>0&&tokens[i-1].type==="text_special"){links=links.slice(1);} -for(ln=0;lnlastPos){token=new state.Token("text","",0);token.content=text.slice(lastPos,pos);token.level=level;nodes.push(token);} -token=new state.Token("link_open","a",1);token.attrs=[["href",fullUrl]];token.level=level++;token.markup="linkify";token.info="auto";nodes.push(token);token=new state.Token("text","",0);token.content=urlText;token.level=level;nodes.push(token);token=new state.Token("link_close","a",-1);token.level=--level;token.markup="linkify";token.info="auto";nodes.push(token);lastPos=links[ln].lastIndex;} -if(lastPos=0;i--){token=inlineTokens[i];if(token.type==="text"&&!inside_autolink){token.content=token.content.replace(SCOPED_ABBR_RE,replaceFn);} -if(token.type==="link_open"&&token.info==="auto"){inside_autolink--;} -if(token.type==="link_close"&&token.info==="auto"){inside_autolink++;}}} -function replace_rare(inlineTokens){var i,token,inside_autolink=0;for(i=inlineTokens.length-1;i>=0;i--){token=inlineTokens[i];if(token.type==="text"&&!inside_autolink){if(RARE_RE.test(token.content)){token.content=token.content.replace(/\+-/g,"\xb1").replace(/\.{2,}/g,"\u2026").replace(/([?!])\u2026/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1\u2014").replace(/(^|\s)--(?=\s|$)/gm,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1\u2013");}} -if(token.type==="link_open"&&token.info==="auto"){inside_autolink--;} -if(token.type==="link_close"&&token.info==="auto"){inside_autolink++;}}} -var replacements=function replace(state){var blkIdx;if(!state.md.options.typographer){return;} -for(blkIdx=state.tokens.length-1;blkIdx>=0;blkIdx--){if(state.tokens[blkIdx].type!=="inline"){continue;} -if(SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)){replace_scoped(state.tokens[blkIdx].children);} -if(RARE_RE.test(state.tokens[blkIdx].content)){replace_rare(state.tokens[blkIdx].children);}}};var isWhiteSpace$1=utils.isWhiteSpace;var isPunctChar$1=utils.isPunctChar;var isMdAsciiPunct$1=utils.isMdAsciiPunct;var QUOTE_TEST_RE=/['"]/;var QUOTE_RE=/['"]/g;var APOSTROPHE="\u2019";function replaceAt(str,index,ch){return str.slice(0,index)+ch+str.slice(index+1);} -function process_inlines(tokens,state){var i,token,text,t,pos,max,thisLevel,item,lastChar,nextChar,isLastPunctChar,isNextPunctChar,isLastWhiteSpace,isNextWhiteSpace,canOpen,canClose,j,isSingle,stack,openQuote,closeQuote;stack=[];for(i=0;i=0;j--){if(stack[j].level<=thisLevel){break;}} -stack.length=j+1;if(token.type!=="text"){continue;} -text=token.content;pos=0;max=text.length;OUTER:while(pos=0){lastChar=text.charCodeAt(t.index-1);}else{for(j=i-1;j>=0;j--){if(tokens[j].type==="softbreak"||tokens[j].type==="hardbreak")break;if(!tokens[j].content)continue;lastChar=tokens[j].content.charCodeAt(tokens[j].content.length-1);break;}} -nextChar=32;if(pos=48&&lastChar<=57){canClose=canOpen=false;}} -if(canOpen&&canClose){canOpen=isLastPunctChar;canClose=isNextPunctChar;} -if(!canOpen&&!canClose){if(isSingle){token.content=replaceAt(token.content,t.index,APOSTROPHE);} -continue;} -if(canClose){for(j=stack.length-1;j>=0;j--){item=stack[j];if(stack[j].level=0;blkIdx--){if(state.tokens[blkIdx].type!=="inline"||!QUOTE_TEST_RE.test(state.tokens[blkIdx].content)){continue;} -process_inlines(state.tokens[blkIdx].children,state);}};var text_join=function text_join(state){var j,l,tokens,curr,max,last,blockTokens=state.tokens;for(j=0,l=blockTokens.length;j=0){value=this.attrs[idx][1];} -return value;};Token.prototype.attrJoin=function attrJoin(name,value){var idx=this.attrIndex(name);if(idx<0){this.attrPush([name,value]);}else{this.attrs[idx][1]=this.attrs[idx][1]+" "+value;}};var token=Token;function StateCore(src,md,env){this.src=src;this.env=env;this.tokens=[];this.inlineMode=false;this.md=md;} -StateCore.prototype.Token=token;var state_core=StateCore;var _rules$2=[["normalize",normalize],["block",block],["inline",inline],["linkify",linkify$1],["replacements",replacements],["smartquotes",smartquotes],["text_join",text_join]];function Core(){this.ruler=new ruler;for(var i=0;i<_rules$2.length;i++){this.ruler.push(_rules$2[i][0],_rules$2[i][1]);}} -Core.prototype.process=function(state){var i,l,rules;rules=this.ruler.getRules("");for(i=0,l=rules.length;iendLine){return false;} -nextLine=startLine+1;if(state.sCount[nextLine]=4){return false;} -pos=state.bMarks[nextLine]+state.tShift[nextLine];if(pos>=state.eMarks[nextLine]){return false;} -firstCh=state.src.charCodeAt(pos++);if(firstCh!==124&&firstCh!==45&&firstCh!==58){return false;} -if(pos>=state.eMarks[nextLine]){return false;} -secondCh=state.src.charCodeAt(pos++);if(secondCh!==124&&secondCh!==45&&secondCh!==58&&!isSpace$a(secondCh)){return false;} -if(firstCh===45&&isSpace$a(secondCh)){return false;} -while(pos=4){return false;} -columns=escapedSplit(lineText);if(columns.length&&columns[0]==="")columns.shift();if(columns.length&&columns[columns.length-1]==="")columns.pop();columnCount=columns.length;if(columnCount===0||columnCount!==aligns.length){return false;} -if(silent){return true;} -oldParentType=state.parentType;state.parentType="table";terminatorRules=state.md.block.ruler.getRules("blockquote");token=state.push("table_open","table",1);token.map=tableLines=[startLine,0];token=state.push("thead_open","thead",1);token.map=[startLine,startLine+1];token=state.push("tr_open","tr",1);token.map=[startLine,startLine+1];for(i=0;i=4){break;} -columns=escapedSplit(lineText);if(columns.length&&columns[0]==="")columns.shift();if(columns.length&&columns[columns.length-1]==="")columns.pop();if(nextLine===startLine+2){token=state.push("tbody_open","tbody",1);token.map=tbodyLines=[startLine+2,0];} -token=state.push("tr_open","tr",1);token.map=[nextLine,nextLine+1];for(i=0;i=4){nextLine++;last=nextLine;continue;} -break;} -state.line=last;token=state.push("code_block","code",0);token.content=state.getLines(startLine,last,4+state.blkIndent,false)+"\n";token.map=[startLine,state.line];return true;};var fence=function fence(state,startLine,endLine,silent){var marker,len,params,nextLine,mem,token,markup,haveEndMarker=false,pos=state.bMarks[startLine]+state.tShift[startLine],max=state.eMarks[startLine];if(state.sCount[startLine]-state.blkIndent>=4){return false;} -if(pos+3>max){return false;} -marker=state.src.charCodeAt(pos);if(marker!==126&&marker!==96){return false;} -mem=pos;pos=state.skipChars(pos,marker);len=pos-mem;if(len<3){return false;} -markup=state.src.slice(mem,pos);params=state.src.slice(pos,max);if(marker===96){if(params.indexOf(String.fromCharCode(marker))>=0){return false;}} -if(silent){return true;} -nextLine=startLine;for(;;){nextLine++;if(nextLine>=endLine){break;} -pos=mem=state.bMarks[nextLine]+state.tShift[nextLine];max=state.eMarks[nextLine];if(pos=4){continue;} -pos=state.skipChars(pos,marker);if(pos-mem=4){return false;} -if(state.src.charCodeAt(pos++)!==62){return false;} -if(silent){return true;} -initial=offset=state.sCount[startLine]+1;if(state.src.charCodeAt(pos)===32){pos++;initial++;offset++;adjustTab=false;spaceAfterMarker=true;}else if(state.src.charCodeAt(pos)===9){spaceAfterMarker=true;if((state.bsCount[startLine]+offset)%4===3){pos++;initial++;offset++;adjustTab=false;}else{adjustTab=true;}}else{spaceAfterMarker=false;} -oldBMarks=[state.bMarks[startLine]];state.bMarks[startLine]=pos;while(pos=max;oldSCount=[state.sCount[startLine]];state.sCount[startLine]=offset-initial;oldTShift=[state.tShift[startLine]];state.tShift[startLine]=pos-state.bMarks[startLine];terminatorRules=state.md.block.ruler.getRules("blockquote");oldParentType=state.parentType;state.parentType="blockquote";for(nextLine=startLine+1;nextLine=max){break;} -if(state.src.charCodeAt(pos++)===62&&!isOutdented){initial=offset=state.sCount[nextLine]+1;if(state.src.charCodeAt(pos)===32){pos++;initial++;offset++;adjustTab=false;spaceAfterMarker=true;}else if(state.src.charCodeAt(pos)===9){spaceAfterMarker=true;if((state.bsCount[nextLine]+offset)%4===3){pos++;initial++;offset++;adjustTab=false;}else{adjustTab=true;}}else{spaceAfterMarker=false;} -oldBMarks.push(state.bMarks[nextLine]);state.bMarks[nextLine]=pos;while(pos=max;oldBSCount.push(state.bsCount[nextLine]);state.bsCount[nextLine]=state.sCount[nextLine]+1+(spaceAfterMarker?1:0);oldSCount.push(state.sCount[nextLine]);state.sCount[nextLine]=offset-initial;oldTShift.push(state.tShift[nextLine]);state.tShift[nextLine]=pos-state.bMarks[nextLine];continue;} -if(lastLineEmpty){break;} -terminate=false;for(i=0,l=terminatorRules.length;i";token.map=lines=[startLine,0];state.md.block.tokenize(state,startLine,nextLine);token=state.push("blockquote_close","blockquote",-1);token.markup=">";state.lineMax=oldLineMax;state.parentType=oldParentType;lines[1]=state.line;for(i=0;i=4){return false;} -marker=state.src.charCodeAt(pos++);if(marker!==42&&marker!==45&&marker!==95){return false;} -cnt=1;while(pos=max){return-1;} -ch=state.src.charCodeAt(pos++);if(ch<48||ch>57){return-1;} -for(;;){if(pos>=max){return-1;} -ch=state.src.charCodeAt(pos++);if(ch>=48&&ch<=57){if(pos-start>=10){return-1;} -continue;} -if(ch===41||ch===46){break;} -return-1;} -if(pos=4){return false;} -if(state.listIndent>=0&&state.sCount[startLine]-state.listIndent>=4&&state.sCount[startLine]=state.blkIndent){isTerminatingParagraph=true;}} -if((posAfterMarker=skipOrderedListMarker(state,startLine))>=0){isOrdered=true;start=state.bMarks[startLine]+state.tShift[startLine];markerValue=Number(state.src.slice(start,posAfterMarker-1));if(isTerminatingParagraph&&markerValue!==1)return false;}else if((posAfterMarker=skipBulletListMarker(state,startLine))>=0){isOrdered=false;}else{return false;} -if(isTerminatingParagraph){if(state.skipSpaces(posAfterMarker)>=state.eMarks[startLine])return false;} -markerCharCode=state.src.charCodeAt(posAfterMarker-1);if(silent){return true;} -listTokIdx=state.tokens.length;if(isOrdered){token=state.push("ordered_list_open","ol",1);if(markerValue!==1){token.attrs=[["start",markerValue]];}}else{token=state.push("bullet_list_open","ul",1);} -token.map=listLines=[startLine,0];token.markup=String.fromCharCode(markerCharCode);nextLine=startLine;prevEmptyEnd=false;terminatorRules=state.md.block.ruler.getRules("list");oldParentType=state.parentType;state.parentType="list";while(nextLine=max){indentAfterMarker=1;}else{indentAfterMarker=offset-initial;} -if(indentAfterMarker>4){indentAfterMarker=1;} -indent=initial+indentAfterMarker;token=state.push("list_item_open","li",1);token.markup=String.fromCharCode(markerCharCode);token.map=itemLines=[startLine,0];if(isOrdered){token.info=state.src.slice(start,posAfterMarker-1);} -oldTight=state.tight;oldTShift=state.tShift[startLine];oldSCount=state.sCount[startLine];oldListIndent=state.listIndent;state.listIndent=state.blkIndent;state.blkIndent=indent;state.tight=true;state.tShift[startLine]=contentStart-state.bMarks[startLine];state.sCount[startLine]=offset;if(contentStart>=max&&state.isEmpty(startLine+1)){state.line=Math.min(state.line+2,endLine);}else{state.md.block.tokenize(state,startLine,endLine,true);} -if(!state.tight||prevEmptyEnd){tight=false;} -prevEmptyEnd=state.line-startLine>1&&state.isEmpty(state.line-1);state.blkIndent=state.listIndent;state.listIndent=oldListIndent;state.tShift[startLine]=oldTShift;state.sCount[startLine]=oldSCount;state.tight=oldTight;token=state.push("list_item_close","li",-1);token.markup=String.fromCharCode(markerCharCode);nextLine=startLine=state.line;itemLines[1]=nextLine;contentStart=state.bMarks[startLine];if(nextLine>=endLine){break;} -if(state.sCount[nextLine]=4){break;} -terminate=false;for(i=0,l=terminatorRules.length;i=4){return false;} -if(state.src.charCodeAt(pos)!==91){return false;} -while(++pos3){continue;} -if(state.sCount[nextLine]<0){continue;} -terminate=false;for(i=0,l=terminatorRules.length;i`\\x00-\\x20]+";var single_quoted="'[^']*'";var double_quoted='"[^"]*"';var attr_value="(?:"+unquoted+"|"+single_quoted+"|"+double_quoted+")";var attribute="(?:\\s+"+attr_name+"(?:\\s*=\\s*"+attr_value+")?)";var open_tag="<[A-Za-z][A-Za-z0-9\\-]*"+attribute+"*\\s*\\/?>";var close_tag="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>";var comment="\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e";var processing="<[?][\\s\\S]*?[?]>";var declaration="]*>";var cdata="";var HTML_TAG_RE$1=new RegExp("^(?:"+open_tag+"|"+close_tag+"|"+comment+"|"+processing+"|"+declaration+"|"+cdata+")");var HTML_OPEN_CLOSE_TAG_RE$1=new RegExp("^(?:"+open_tag+"|"+close_tag+")");var HTML_TAG_RE_1=HTML_TAG_RE$1;var HTML_OPEN_CLOSE_TAG_RE_1=HTML_OPEN_CLOSE_TAG_RE$1;var html_re={HTML_TAG_RE:HTML_TAG_RE_1,HTML_OPEN_CLOSE_TAG_RE:HTML_OPEN_CLOSE_TAG_RE_1};var HTML_OPEN_CLOSE_TAG_RE=html_re.HTML_OPEN_CLOSE_TAG_RE;var HTML_SEQUENCES=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,true],[/^/,true],[/^<\?/,/\?>/,true],[/^/,true],[/^/,true],[new RegExp("^|$))","i"),/^$/,true],[new RegExp(HTML_OPEN_CLOSE_TAG_RE.source+"\\s*$"),/^$/,false]];var html_block=function html_block(state,startLine,endLine,silent){var i,nextLine,token,lineText,pos=state.bMarks[startLine]+state.tShift[startLine],max=state.eMarks[startLine];if(state.sCount[startLine]-state.blkIndent>=4){return false;} -if(!state.md.options.html){return false;} -if(state.src.charCodeAt(pos)!==60){return false;} -lineText=state.src.slice(pos,max);for(i=0;i=4){return false;} -ch=state.src.charCodeAt(pos);if(ch!==35||pos>=max){return false;} -level=1;ch=state.src.charCodeAt(++pos);while(ch===35&&pos6||pospos&&isSpace$5(state.src.charCodeAt(tmp-1))){max=tmp;} -state.line=startLine+1;token=state.push("heading_open","h"+String(level),1);token.markup="########".slice(0,level);token.map=[startLine,state.line];token=state.push("inline","",0);token.content=state.src.slice(pos,max).trim();token.map=[startLine,state.line];token.children=[];token=state.push("heading_close","h"+String(level),-1);token.markup="########".slice(0,level);return true;};var lheading=function lheading(state,startLine,endLine){var content,terminate,i,l,token,pos,max,level,marker,nextLine=startLine+1,oldParentType,terminatorRules=state.md.block.ruler.getRules("paragraph");if(state.sCount[startLine]-state.blkIndent>=4){return false;} -oldParentType=state.parentType;state.parentType="paragraph";for(;nextLine3){continue;} -if(state.sCount[nextLine]>=state.blkIndent){pos=state.bMarks[nextLine]+state.tShift[nextLine];max=state.eMarks[nextLine];if(pos=max){level=marker===61?1:2;break;}}}} -if(state.sCount[nextLine]<0){continue;} -terminate=false;for(i=0,l=terminatorRules.length;i3){continue;} -if(state.sCount[nextLine]<0){continue;} -terminate=false;for(i=0,l=terminatorRules.length;i0)this.level++;this.tokens.push(token$1);return token$1;};StateBlock.prototype.isEmpty=function isEmpty(line){return this.bMarks[line]+this.tShift[line]>=this.eMarks[line];};StateBlock.prototype.skipEmptyLines=function skipEmptyLines(from){for(var max=this.lineMax;frommin){if(!isSpace$4(this.src.charCodeAt(--pos))){return pos+1;}} -return pos;};StateBlock.prototype.skipChars=function skipChars(pos,code){for(var max=this.src.length;posmin){if(code!==this.src.charCodeAt(--pos)){return pos+1;}} -return pos;};StateBlock.prototype.getLines=function getLines(begin,end,indent,keepLastLF){var i,lineIndent,ch,first,last,queue,lineStart,line=begin;if(begin>=end){return"";} -queue=new Array(end-begin);for(i=0;lineindent){queue[i]=new Array(lineIndent-indent+1).join(" ")+this.src.slice(first,last);}else{queue[i]=this.src.slice(first,last);}} -return queue.join("");};StateBlock.prototype.Token=token;var state_block=StateBlock;var _rules$1=[["table",table,["paragraph","reference"]],["code",code],["fence",fence,["paragraph","reference","blockquote","list"]],["blockquote",blockquote,["paragraph","reference","blockquote","list"]],["hr",hr,["paragraph","reference","blockquote","list"]],["list",list,["paragraph","reference","blockquote"]],["reference",reference],["html_block",html_block,["paragraph","reference","blockquote"]],["heading",heading,["paragraph","reference","blockquote"]],["lheading",lheading],["paragraph",paragraph]];function ParserBlock(){this.ruler=new ruler;for(var i=0;i<_rules$1.length;i++){this.ruler.push(_rules$1[i][0],_rules$1[i][1],{alt:(_rules$1[i][2]||[]).slice()});}} -ParserBlock.prototype.tokenize=function(state,startLine,endLine){var ok,i,rules=this.ruler.getRules(""),len=rules.length,line=startLine,hasEmptyLines=false,maxNesting=state.md.options.maxNesting;while(line=endLine){break;} -if(state.sCount[line]=maxNesting){state.line=endLine;break;} -for(i=0;i0)return false;pos=state.pos;max=state.posMax;if(pos+3>max)return false;if(state.src.charCodeAt(pos)!==58)return false;if(state.src.charCodeAt(pos+1)!==47)return false;if(state.src.charCodeAt(pos+2)!==47)return false;match=state.pending.match(SCHEME_RE);if(!match)return false;proto=match[1];link=state.md.linkify.matchAtStart(state.src.slice(pos-proto.length));if(!link)return false;url=link.url;url=url.replace(/\*+$/,"");fullUrl=state.md.normalizeLink(url);if(!state.md.validateLink(fullUrl))return false;if(!silent){state.pending=state.pending.slice(0,-proto.length);token=state.push("link_open","a",1);token.attrs=[["href",fullUrl]];token.markup="linkify";token.info="auto";token=state.push("text","",0);token.content=state.md.normalizeLinkText(url);token=state.push("link_close","a",-1);token.markup="linkify";token.info="auto";} -state.pos+=url.length-proto.length;return true;};var isSpace$3=utils.isSpace;var newline=function newline(state,silent){var pmax,max,ws,pos=state.pos;if(state.src.charCodeAt(pos)!==10){return false;} -pmax=state.pending.length-1;max=state.posMax;if(!silent){if(pmax>=0&&state.pending.charCodeAt(pmax)===32){if(pmax>=1&&state.pending.charCodeAt(pmax-1)===32){ws=pmax-1;while(ws>=1&&state.pending.charCodeAt(ws-1)===32)ws--;state.pending=state.pending.slice(0,ws);state.push("hardbreak","br",0);}else{state.pending=state.pending.slice(0,-1);state.push("softbreak","br",0);}}else{state.push("softbreak","br",0);}} -pos++;while(pos?@[]^_`{|}~-".split("").forEach((function(ch){ESCAPED[ch.charCodeAt(0)]=1;}));var _escape=function escape(state,silent){var ch1,ch2,origStr,escapedStr,token,pos=state.pos,max=state.posMax;if(state.src.charCodeAt(pos)!==92)return false;pos++;if(pos>=max)return false;ch1=state.src.charCodeAt(pos);if(ch1===10){if(!silent){state.push("hardbreak","br",0);} -pos++;while(pos=55296&&ch1<=56319&&pos+1=56320&&ch2<=57343){escapedStr+=state.src[pos+1];pos++;}} -origStr="\\"+escapedStr;if(!silent){token=state.push("text_special","",0);if(ch1<256&&ESCAPED[ch1]!==0){token.content=escapedStr;}else{token.content=origStr;} -token.markup=origStr;token.info="escape";} -state.pos=pos+1;return true;};var backticks=function backtick(state,silent){var start,max,marker,token,matchStart,matchEnd,openerLength,closerLength,pos=state.pos,ch=state.src.charCodeAt(pos);if(ch!==96){return false;} -start=pos;pos++;max=state.posMax;while(pos=0;i--){startDelim=delimiters[i];if(startDelim.marker!==95&&startDelim.marker!==42){continue;} -if(startDelim.end===-1){continue;} -endDelim=delimiters[startDelim.end];isStrong=i>0&&delimiters[i-1].end===startDelim.end+1&&delimiters[i-1].marker===startDelim.marker&&delimiters[i-1].token===startDelim.token-1&&delimiters[startDelim.end+1].token===endDelim.token+1;ch=String.fromCharCode(startDelim.marker);token=state.tokens[startDelim.token];token.type=isStrong?"strong_open":"em_open";token.tag=isStrong?"strong":"em";token.nesting=1;token.markup=isStrong?ch+ch:ch;token.content="";token=state.tokens[endDelim.token];token.type=isStrong?"strong_close":"em_close";token.tag=isStrong?"strong":"em";token.nesting=-1;token.markup=isStrong?ch+ch:ch;token.content="";if(isStrong){state.tokens[delimiters[i-1].token].content="";state.tokens[delimiters[startDelim.end+1].token].content="";i--;}}} -var postProcess_1=function emphasis(state){var curr,tokens_meta=state.tokens_meta,max=state.tokens_meta.length;postProcess(state,state.delimiters);for(curr=0;curr=max){return false;} -start=pos;res=state.md.helpers.parseLinkDestination(state.src,pos,state.posMax);if(res.ok){href=state.md.normalizeLink(res.str);if(state.md.validateLink(href)){pos=res.pos;}else{href="";} -start=pos;for(;pos=max||state.src.charCodeAt(pos)!==41){parseReference=true;} -pos++;} -if(parseReference){if(typeof state.env.references==="undefined"){return false;} -if(pos=0){label=state.src.slice(start,pos++);}else{pos=labelEnd+1;}}else{pos=labelEnd+1;} -if(!label){label=state.src.slice(labelStart,labelEnd);} -ref=state.env.references[normalizeReference$1(label)];if(!ref){state.pos=oldPos;return false;} -href=ref.href;title=ref.title;} -if(!silent){state.pos=labelStart;state.posMax=labelEnd;token=state.push("link_open","a",1);token.attrs=attrs=[["href",href]];if(title){attrs.push(["title",title]);} -state.linkLevel++;state.md.inline.tokenize(state);state.linkLevel--;token=state.push("link_close","a",-1);} -state.pos=pos;state.posMax=max;return true;};var normalizeReference=utils.normalizeReference;var isSpace=utils.isSpace;var image=function image(state,silent){var attrs,code,content,label,labelEnd,labelStart,pos,ref,res,title,token,tokens,start,href="",oldPos=state.pos,max=state.posMax;if(state.src.charCodeAt(state.pos)!==33){return false;} -if(state.src.charCodeAt(state.pos+1)!==91){return false;} -labelStart=state.pos+2;labelEnd=state.md.helpers.parseLinkLabel(state,state.pos+1,false);if(labelEnd<0){return false;} -pos=labelEnd+1;if(pos=max){return false;} -start=pos;res=state.md.helpers.parseLinkDestination(state.src,pos,state.posMax);if(res.ok){href=state.md.normalizeLink(res.str);if(state.md.validateLink(href)){pos=res.pos;}else{href="";}} -start=pos;for(;pos=max||state.src.charCodeAt(pos)!==41){state.pos=oldPos;return false;} -pos++;}else{if(typeof state.env.references==="undefined"){return false;} -if(pos=0){label=state.src.slice(start,pos++);}else{pos=labelEnd+1;}}else{pos=labelEnd+1;} -if(!label){label=state.src.slice(labelStart,labelEnd);} -ref=state.env.references[normalizeReference(label)];if(!ref){state.pos=oldPos;return false;} -href=ref.href;title=ref.title;} -if(!silent){content=state.src.slice(labelStart,labelEnd);state.md.inline.parse(content,state.md,state.env,tokens=[]);token=state.push("image","img",0);token.attrs=attrs=[["src",href],["alt",""]];token.children=tokens;token.content=content;if(title){attrs.push(["title",title]);}} -state.pos=pos;state.posMax=max;return true;};var EMAIL_RE=/^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;var AUTOLINK_RE=/^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/;var autolink=function autolink(state,silent){var url,fullUrl,token,ch,start,max,pos=state.pos;if(state.src.charCodeAt(pos)!==60){return false;} -start=state.pos;max=state.posMax;for(;;){if(++pos>=max)return false;ch=state.src.charCodeAt(pos);if(ch===60)return false;if(ch===62)break;} -url=state.src.slice(start+1,pos);if(AUTOLINK_RE.test(url)){fullUrl=state.md.normalizeLink(url);if(!state.md.validateLink(fullUrl)){return false;} -if(!silent){token=state.push("link_open","a",1);token.attrs=[["href",fullUrl]];token.markup="autolink";token.info="auto";token=state.push("text","",0);token.content=state.md.normalizeLinkText(url);token=state.push("link_close","a",-1);token.markup="autolink";token.info="auto";} -state.pos+=url.length+2;return true;} -if(EMAIL_RE.test(url)){fullUrl=state.md.normalizeLink("mailto:"+url);if(!state.md.validateLink(fullUrl)){return false;} -if(!silent){token=state.push("link_open","a",1);token.attrs=[["href",fullUrl]];token.markup="autolink";token.info="auto";token=state.push("text","",0);token.content=state.md.normalizeLinkText(url);token=state.push("link_close","a",-1);token.markup="autolink";token.info="auto";} -state.pos+=url.length+2;return true;} -return false;};var HTML_TAG_RE=html_re.HTML_TAG_RE;function isLinkOpen(str){return/^\s]/i.test(str);} -function isLinkClose(str){return/^<\/a\s*>/i.test(str);} -function isLetter(ch){var lc=ch|32;return lc>=97&&lc<=122;} -var html_inline=function html_inline(state,silent){var ch,match,max,token,pos=state.pos;if(!state.md.options.html){return false;} -max=state.posMax;if(state.src.charCodeAt(pos)!==60||pos+2>=max){return false;} -ch=state.src.charCodeAt(pos+1);if(ch!==33&&ch!==63&&ch!==47&&!isLetter(ch)){return false;} -match=state.src.slice(pos).match(HTML_TAG_RE);if(!match){return false;} -if(!silent){token=state.push("html_inline","",0);token.content=state.src.slice(pos,pos+match[0].length);if(isLinkOpen(token.content))state.linkLevel++;if(isLinkClose(token.content))state.linkLevel--;} -state.pos+=match[0].length;return true;};var has=utils.has;var isValidEntityCode=utils.isValidEntityCode;var fromCodePoint=utils.fromCodePoint;var DIGITAL_RE=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;var NAMED_RE=/^&([a-z][a-z0-9]{1,31});/i;var entity=function entity(state,silent){var ch,code,match,token,pos=state.pos,max=state.posMax;if(state.src.charCodeAt(pos)!==38)return false;if(pos+1>=max)return false;ch=state.src.charCodeAt(pos+1);if(ch===35){match=state.src.slice(pos).match(DIGITAL_RE);if(match){if(!silent){code=match[1][0].toLowerCase()==="x"?parseInt(match[1].slice(1),16):parseInt(match[1],10);token=state.push("text_special","",0);token.content=isValidEntityCode(code)?fromCodePoint(code):fromCodePoint(65533);token.markup=match[0];token.info="entity";} -state.pos+=match[0].length;return true;}}else{match=state.src.slice(pos).match(NAMED_RE);if(match){if(has(entities,match[1])){if(!silent){token=state.push("text_special","",0);token.content=entities[match[1]];token.markup=match[0];token.info="entity";} -state.pos+=match[0].length;return true;}}} -return false;};function processDelimiters(state,delimiters){var closerIdx,openerIdx,closer,opener,minOpenerIdx,newMinOpenerIdx,isOddMatch,lastJump,openersBottom={},max=delimiters.length;if(!max)return;var headerIdx=0;var lastTokenIdx=-2;var jumps=[];for(closerIdx=0;closerIdxminOpenerIdx;openerIdx-=jumps[openerIdx]+1){opener=delimiters[openerIdx];if(opener.marker!==closer.marker)continue;if(opener.open&&opener.end<0){isOddMatch=false;if(opener.close||closer.open){if((opener.length+closer.length)%3===0){if(opener.length%3!==0||closer.length%3!==0){isOddMatch=true;}}} -if(!isOddMatch){lastJump=openerIdx>0&&!delimiters[openerIdx-1].open?jumps[openerIdx-1]+1:0;jumps[closerIdx]=closerIdx-openerIdx+lastJump;jumps[openerIdx]=lastJump;closer.open=false;opener.end=closerIdx;opener.close=false;newMinOpenerIdx=-1;lastTokenIdx=-2;break;}}} -if(newMinOpenerIdx!==-1){openersBottom[closer.marker][(closer.open?3:0)+(closer.length||0)%3]=newMinOpenerIdx;}}} -var balance_pairs=function link_pairs(state){var curr,tokens_meta=state.tokens_meta,max=state.tokens_meta.length;processDelimiters(state,state.delimiters);for(curr=0;curr0)level++;if(tokens[curr].type==="text"&&curr+10){this.level++;this._prev_delimiters.push(this.delimiters);this.delimiters=[];token_meta={delimiters:this.delimiters};} -this.pendingLevel=this.level;this.tokens.push(token$1);this.tokens_meta.push(token_meta);return token$1;};StateInline.prototype.scanDelims=function(start,canSplitWord){var pos=start,lastChar,nextChar,count,can_open,can_close,isLastWhiteSpace,isLastPunctChar,isNextWhiteSpace,isNextPunctChar,left_flanking=true,right_flanking=true,max=this.posMax,marker=this.src.charCodeAt(start);lastChar=start>0?this.src.charCodeAt(start-1):32;while(pos=end){break;} -continue;} -state.pending+=state.src[state.pos++];} -if(state.pending){state.pushPending();}};ParserInline.prototype.parse=function(str,md,env,outTokens){var i,rules,len;var state=new this.State(str,md,env,outTokens);this.tokenize(state);rules=this.ruler2.getRules("");len=rules.length;for(i=0;i|$))";re.tpl_email_fuzzy="(^|"+text_separators+'|"|\\(|'+re.src_ZCc+")"+"("+re.src_email_name+"@"+re.tpl_host_fuzzy_strict+")";re.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+re.src_ZPCc+"))"+"((?![$+<=>^`|\uff5c])"+re.tpl_host_port_fuzzy_strict+re.src_path+")";re.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+re.src_ZPCc+"))"+"((?![$+<=>^`|\uff5c])"+re.tpl_host_port_no_ip_fuzzy_strict+re.src_path+")";return re;};function assign(obj){var sources=Array.prototype.slice.call(arguments,1);sources.forEach((function(source){if(!source){return;} -Object.keys(source).forEach((function(key){obj[key]=source[key];}));}));return obj;} -function _class(obj){return Object.prototype.toString.call(obj);} -function isString(obj){return _class(obj)==="[object String]";} -function isObject(obj){return _class(obj)==="[object Object]";} -function isRegExp(obj){return _class(obj)==="[object RegExp]";} -function isFunction(obj){return _class(obj)==="[object Function]";} -function escapeRE(str){return str.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&");} -var defaultOptions={fuzzyLink:true,fuzzyEmail:true,fuzzyIP:false};function isOptionsObj(obj){return Object.keys(obj||{}).reduce((function(acc,k){return acc||defaultOptions.hasOwnProperty(k);}),false);} -var defaultSchemas={"http:":{validate:function(text,pos,self){var tail=text.slice(pos);if(!self.re.http){self.re.http=new RegExp("^\\/\\/"+self.re.src_auth+self.re.src_host_port_strict+self.re.src_path,"i");} -if(self.re.http.test(tail)){return tail.match(self.re.http)[0].length;} -return 0;}},"https:":"http:","ftp:":"http:","//":{validate:function(text,pos,self){var tail=text.slice(pos);if(!self.re.no_http){self.re.no_http=new RegExp("^"+self.re.src_auth+"(?:localhost|(?:(?:"+self.re.src_domain+")\\.)+"+self.re.src_domain_root+")"+self.re.src_port+self.re.src_host_terminator+self.re.src_path,"i");} -if(self.re.no_http.test(tail)){if(pos>=3&&text[pos-3]===":"){return 0;} -if(pos>=3&&text[pos-3]==="/"){return 0;} -return tail.match(self.re.no_http)[0].length;} -return 0;}},"mailto:":{validate:function(text,pos,self){var tail=text.slice(pos);if(!self.re.mailto){self.re.mailto=new RegExp("^"+self.re.src_email_name+"@"+self.re.src_host_strict,"i");} -if(self.re.mailto.test(tail)){return tail.match(self.re.mailto)[0].length;} -return 0;}}};var tlds_2ch_src_re="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]";var tlds_default="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function resetScanCache(self){self.__index__=-1;self.__text_cache__="";} -function createValidator(re){return function(text,pos){var tail=text.slice(pos);if(re.test(tail)){return tail.match(re)[0].length;} -return 0;};} -function createNormalizer(){return function(match,self){self.normalize(match);};} -function compile(self){var re$1=self.re=re(self.__opts__);var tlds=self.__tlds__.slice();self.onCompile();if(!self.__tlds_replaced__){tlds.push(tlds_2ch_src_re);} -tlds.push(re$1.src_xn);re$1.src_tlds=tlds.join("|");function untpl(tpl){return tpl.replace("%TLDS%",re$1.src_tlds);} -re$1.email_fuzzy=RegExp(untpl(re$1.tpl_email_fuzzy),"i");re$1.link_fuzzy=RegExp(untpl(re$1.tpl_link_fuzzy),"i");re$1.link_no_ip_fuzzy=RegExp(untpl(re$1.tpl_link_no_ip_fuzzy),"i");re$1.host_fuzzy_test=RegExp(untpl(re$1.tpl_host_fuzzy_test),"i");var aliases=[];self.__compiled__={};function schemaError(name,val){throw new Error('(LinkifyIt) Invalid schema "'+name+'": '+val);} -Object.keys(self.__schemas__).forEach((function(name){var val=self.__schemas__[name];if(val===null){return;} -var compiled={validate:null,link:null};self.__compiled__[name]=compiled;if(isObject(val)){if(isRegExp(val.validate)){compiled.validate=createValidator(val.validate);}else if(isFunction(val.validate)){compiled.validate=val.validate;}else{schemaError(name,val);} -if(isFunction(val.normalize)){compiled.normalize=val.normalize;}else if(!val.normalize){compiled.normalize=createNormalizer();}else{schemaError(name,val);} -return;} -if(isString(val)){aliases.push(name);return;} -schemaError(name,val);}));aliases.forEach((function(alias){if(!self.__compiled__[self.__schemas__[alias]]){return;} -self.__compiled__[alias].validate=self.__compiled__[self.__schemas__[alias]].validate;self.__compiled__[alias].normalize=self.__compiled__[self.__schemas__[alias]].normalize;}));self.__compiled__[""]={validate:null,normalize:createNormalizer()};var slist=Object.keys(self.__compiled__).filter((function(name){return name.length>0&&self.__compiled__[name];})).map(escapeRE).join("|");self.re.schema_test=RegExp("(^|(?!_)(?:[><\uff5c]|"+re$1.src_ZPCc+"))("+slist+")","i");self.re.schema_search=RegExp("(^|(?!_)(?:[><\uff5c]|"+re$1.src_ZPCc+"))("+slist+")","ig");self.re.schema_at_start=RegExp("^"+self.re.schema_search.source,"i");self.re.pretest=RegExp("("+self.re.schema_test.source+")|("+self.re.host_fuzzy_test.source+")|@","i");resetScanCache(self);} -function Match(self,shift){var start=self.__index__,end=self.__last_index__,text=self.__text_cache__.slice(start,end);this.schema=self.__schema__.toLowerCase();this.index=start+shift;this.lastIndex=end+shift;this.raw=text;this.text=text;this.url=text;} -function createMatch(self,shift){var match=new Match(self,shift);self.__compiled__[match.schema].normalize(match,self);return match;} -function LinkifyIt(schemas,options){if(!(this instanceof LinkifyIt)){return new LinkifyIt(schemas,options);} -if(!options){if(isOptionsObj(schemas)){options=schemas;schemas={};}} -this.__opts__=assign({},defaultOptions,options);this.__index__=-1;this.__last_index__=-1;this.__schema__="";this.__text_cache__="";this.__schemas__=assign({},defaultSchemas,schemas);this.__compiled__={};this.__tlds__=tlds_default;this.__tlds_replaced__=false;this.re={};compile(this);} -LinkifyIt.prototype.add=function add(schema,definition){this.__schemas__[schema]=definition;compile(this);return this;};LinkifyIt.prototype.set=function set(options){this.__opts__=assign(this.__opts__,options);return this;};LinkifyIt.prototype.test=function test(text){this.__text_cache__=text;this.__index__=-1;if(!text.length){return false;} -var m,ml,me,len,shift,next,re,tld_pos,at_pos;if(this.re.schema_test.test(text)){re=this.re.schema_search;re.lastIndex=0;while((m=re.exec(text))!==null){len=this.testSchemaAt(text,m[2],re.lastIndex);if(len){this.__schema__=m[2];this.__index__=m.index+m[1].length;this.__last_index__=m.index+m[0].length+len;break;}}} -if(this.__opts__.fuzzyLink&&this.__compiled__["http:"]){tld_pos=text.search(this.re.host_fuzzy_test);if(tld_pos>=0){if(this.__index__<0||tld_pos=0){if((me=text.match(this.re.email_fuzzy))!==null){shift=me.index+me[1].length;next=me.index+me[0].length;if(this.__index__<0||shiftthis.__last_index__){this.__schema__="mailto:";this.__index__=shift;this.__last_index__=next;}}}} -return this.__index__>=0;};LinkifyIt.prototype.pretest=function pretest(text){return this.re.pretest.test(text);};LinkifyIt.prototype.testSchemaAt=function testSchemaAt(text,schema,pos){if(!this.__compiled__[schema.toLowerCase()]){return 0;} -return this.__compiled__[schema.toLowerCase()].validate(text,pos,this);};LinkifyIt.prototype.match=function match(text){var shift=0,result=[];if(this.__index__>=0&&this.__text_cache__===text){result.push(createMatch(this,shift));shift=this.__last_index__;} -var tail=shift?text.slice(shift):text;while(this.test(tail)){result.push(createMatch(this,shift));tail=tail.slice(this.__last_index__);shift+=this.__last_index__;} -if(result.length){return result;} -return null;};LinkifyIt.prototype.matchAtStart=function matchAtStart(text){this.__text_cache__=text;this.__index__=-1;if(!text.length)return null;var m=this.re.schema_at_start.exec(text);if(!m)return null;var len=this.testSchemaAt(text,m[2],m[0].length);if(!len)return null;this.__schema__=m[2];this.__index__=m.index+m[1].length;this.__last_index__=m.index+m[0].length+len;return createMatch(this,0);};LinkifyIt.prototype.tlds=function tlds(list,keepOld){list=Array.isArray(list)?list:[list];if(!keepOld){this.__tlds__=list.slice();this.__tlds_replaced__=true;compile(this);return this;} -this.__tlds__=this.__tlds__.concat(list).sort().filter((function(el,idx,arr){return el!==arr[idx-1];})).reverse();compile(this);return this;};LinkifyIt.prototype.normalize=function normalize(match){if(!match.schema){match.url="http://"+match.url;} -if(match.schema==="mailto:"&&!/^mailto:/i.test(match.url)){match.url="mailto:"+match.url;}};LinkifyIt.prototype.onCompile=function onCompile(){};var linkifyIt=LinkifyIt;var maxInt=2147483647;var base=36;var tMin=1;var tMax=26;var skew=38;var damp=700;var initialBias=72;var initialN=128;var delimiter="-";var regexPunycode=/^xn--/;var regexNonASCII=/[^\x20-\x7E]/;var regexSeparators=/[\x2E\u3002\uFF0E\uFF61]/g;var errors={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"};var baseMinusTMin=base-tMin;var floor=Math.floor;var stringFromCharCode=String.fromCharCode;function error(type){throw new RangeError(errors[type]);} -function map(array,fn){var length=array.length;var result=[];while(length--){result[length]=fn(array[length]);} -return result;} -function mapDomain(string,fn){var parts=string.split("@");var result="";if(parts.length>1){result=parts[0]+"@";string=parts[1];} -string=string.replace(regexSeparators,".");var labels=string.split(".");var encoded=map(labels,fn).join(".");return result+encoded;} -function ucs2decode(string){var output=[],counter=0,length=string.length,value,extra;while(counter=55296&&value<=56319&&counter65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023;} -output+=stringFromCharCode(value);return output;})).join("");} -function basicToDigit(codePoint){if(codePoint-48<10){return codePoint-22;} -if(codePoint-65<26){return codePoint-65;} -if(codePoint-97<26){return codePoint-97;} -return base;} -function digitToBasic(digit,flag){return digit+22+75*(digit<26)-((flag!=0)<<5);} -function adapt(delta,numPoints,firstTime){var k=0;delta=firstTime?floor(delta/damp):delta>>1;delta+=floor(delta/numPoints);for(;delta>baseMinusTMin*tMax>>1;k+=base){delta=floor(delta/baseMinusTMin);} -return floor(k+(baseMinusTMin+1)*delta/(delta+skew));} -function decode(input){var output=[],inputLength=input.length,out,i=0,n=initialN,bias=initialBias,basic,j,index,oldi,w,k,digit,t,baseMinusT;basic=input.lastIndexOf(delimiter);if(basic<0){basic=0;} -for(j=0;j=128){error("not-basic");} -output.push(input.charCodeAt(j));} -for(index=basic>0?basic+1:0;index=inputLength){error("invalid-input");} -digit=basicToDigit(input.charCodeAt(index++));if(digit>=base||digit>floor((maxInt-i)/w)){error("overflow");} -i+=digit*w;t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(digitfloor(maxInt/baseMinusT)){error("overflow");} -w*=baseMinusT;} -out=output.length+1;bias=adapt(i-oldi,out,oldi==0);if(floor(i/out)>maxInt-n){error("overflow");} -n+=floor(i/out);i%=out;output.splice(i++,0,n);} -return ucs2encode(output);} -function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,output=[],inputLength,handledCPCountPlusOne,baseMinusT,qMinusT;input=ucs2decode(input);inputLength=input.length;n=initialN;delta=0;bias=initialBias;for(j=0;j=n&¤tValuefloor((maxInt-delta)/handledCPCountPlusOne)){error("overflow");} -delta+=(m-n)*handledCPCountPlusOne;n=m;for(j=0;jmaxInt){error("overflow");} -if(currentValue==n){for(q=delta,k=base;;k+=base){t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(q=0){try{parsed.hostname=punycode.toASCII(parsed.hostname);}catch(er){}}} -return mdurl.encode(mdurl.format(parsed));} -function normalizeLinkText(url){var parsed=mdurl.parse(url,true);if(parsed.hostname){if(!parsed.protocol||RECODE_HOSTNAME_FOR.indexOf(parsed.protocol)>=0){try{parsed.hostname=punycode.toUnicode(parsed.hostname);}catch(er){}}} -return mdurl.decode(mdurl.format(parsed),mdurl.decode.defaultChars+"%");} -function MarkdownIt(presetName,options){if(!(this instanceof MarkdownIt)){return new MarkdownIt(presetName,options);} -if(!options){if(!utils.isString(presetName)){options=presetName||{};presetName="default";}} -this.inline=new parser_inline;this.block=new parser_block;this.core=new parser_core;this.renderer=new renderer;this.linkify=new linkifyIt;this.validateLink=validateLink;this.normalizeLink=normalizeLink;this.normalizeLinkText=normalizeLinkText;this.utils=utils;this.helpers=utils.assign({},helpers);this.options={};this.configure(presetName);if(options){this.set(options);}} -MarkdownIt.prototype.set=function(options){utils.assign(this.options,options);return this;};MarkdownIt.prototype.configure=function(presets){var self=this,presetName;if(utils.isString(presets)){presetName=presets;presets=config[presetName];if(!presets){throw new Error('Wrong `markdown-it` preset "'+presetName+'", check name');}} -if(!presets){throw new Error("Wrong `markdown-it` preset, can't be empty");} -if(presets.options){self.set(presets.options);} -if(presets.components){Object.keys(presets.components).forEach((function(name){if(presets.components[name].rules){self[name].ruler.enableOnly(presets.components[name].rules);} -if(presets.components[name].rules2){self[name].ruler2.enableOnly(presets.components[name].rules2);}}));} -return this;};MarkdownIt.prototype.enable=function(list,ignoreInvalid){var result=[];if(!Array.isArray(list)){list=[list];} -["core","block","inline"].forEach((function(chain){result=result.concat(this[chain].ruler.enable(list,true));}),this);result=result.concat(this.inline.ruler2.enable(list,true));var missed=list.filter((function(name){return result.indexOf(name)<0;}));if(missed.length&&!ignoreInvalid){throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+missed);} -return this;};MarkdownIt.prototype.disable=function(list,ignoreInvalid){var result=[];if(!Array.isArray(list)){list=[list];} -["core","block","inline"].forEach((function(chain){result=result.concat(this[chain].ruler.disable(list,true));}),this);result=result.concat(this.inline.ruler2.disable(list,true));var missed=list.filter((function(name){return result.indexOf(name)<0;}));if(missed.length&&!ignoreInvalid){throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+missed);} -return this;};MarkdownIt.prototype.use=function(plugin){var args=[this].concat(Array.prototype.slice.call(arguments,1));plugin.apply(plugin,args);return this;};MarkdownIt.prototype.parse=function(src,env){if(typeof src!=="string"){throw new Error("Input data should be a String");} -var state=new this.core.State(src,this,env);this.core.process(state);return state.tokens;};MarkdownIt.prototype.render=function(src,env){env=env||{};return this.renderer.render(this.parse(src,env),this.options,env);};MarkdownIt.prototype.parseInline=function(src,env){var state=new this.core.State(src,this,env);state.inlineMode=true;this.core.process(state);return state.tokens;};MarkdownIt.prototype.renderInline=function(src,env){env=env||{};return this.renderer.render(this.parseInline(src,env),this.options,env);};var lib=MarkdownIt;var markdownIt=lib;return markdownIt;}));(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?factory(exports):typeof define==='function'&&define.amd?define(['exports'],factory):(factory((global.pell={})));}(this,(function(exports){'use strict';var _extends=Object.assign||function(target){for(var i=1;i1&&arguments[1]!==undefined?arguments[1]:null;return document.execCommand(command,false,value);};var defaultActions={bold:{icon:'B',title:'Bold',state:function state(){return queryCommandState('bold');},result:function result(){return exec('bold');}},italic:{icon:'I',title:'Italic',state:function state(){return queryCommandState('italic');},result:function result(){return exec('italic');}},underline:{icon:'U',title:'Underline',state:function state(){return queryCommandState('underline');},result:function result(){return exec('underline');}},strikethrough:{icon:'S',title:'Strike-through',state:function state(){return queryCommandState('strikeThrough');},result:function result(){return exec('strikeThrough');}},heading1:{icon:'H1',title:'Heading 1',result:function result(){return exec(formatBlock,'

');}},heading2:{icon:'H2',title:'Heading 2',result:function result(){return exec(formatBlock,'

');}},paragraph:{icon:'¶',title:'Paragraph',result:function result(){return exec(formatBlock,'

');}},quote:{icon:'“ ”',title:'Quote',result:function result(){return exec(formatBlock,'

');}},olist:{icon:'#',title:'Ordered List',result:function result(){return exec('insertOrderedList');}},ulist:{icon:'•',title:'Unordered List',result:function result(){return exec('insertUnorderedList');}},code:{icon:'</>',title:'Code',result:function result(){return exec(formatBlock,'
');}},line:{icon:'―',title:'Horizontal Line',result:function result(){return exec('insertHorizontalRule');}},link:{icon:'🔗',title:'Link',result:function result(){var url=window.prompt('Enter the link URL');if(url)exec('createLink',url);}},image:{icon:'📷',title:'Image',result:function result(){var url=window.prompt('Enter the image URL');if(url)exec('insertImage',url);}}};var defaultClasses={actionbar:'pell-actionbar',button:'pell-button',content:'pell-content',selected:'pell-button-selected'};var init=function init(settings){var actions=settings.actions?settings.actions.map(function(action){if(typeof action==='string')return defaultActions[action];else if(defaultActions[action.name])return _extends({},defaultActions[action.name],action);return action;}):Object.keys(defaultActions).map(function(action){return defaultActions[action];});var classes=_extends({},defaultClasses,settings.classes);var defaultParagraphSeparator=settings[defaultParagraphSeparatorString]||'div';var actionbar=createElement('div');actionbar.className=classes.actionbar;appendChild(settings.element,actionbar);var content=settings.element.content=createElement('div');content.contentEditable=true;content.className=classes.content;content.oninput=function(_ref){var firstChild=_ref.target.firstChild;if(firstChild&&firstChild.nodeType===3)exec(formatBlock,'<'+defaultParagraphSeparator+'>');else if(content.innerHTML==='
')content.innerHTML='';settings.onChange(content.innerHTML);};content.onkeydown=function(event){if(event.key==='Enter'&&queryCommandValue(formatBlock)==='blockquote'){setTimeout(function(){return exec(formatBlock,'<'+defaultParagraphSeparator+'>');},0);}};appendChild(settings.element,content);actions.forEach(function(action){var button=createElement('button');button.className=classes.button;button.innerHTML=action.icon;button.title=action.title;button.setAttribute('type','button');button.onclick=function(){return action.result()&&content.focus();};if(action.state){var handler=function handler(){return button.classList[action.state()?'add':'remove'](classes.selected);};addEventListener(content,'keyup',handler);addEventListener(content,'mouseup',handler);addEventListener(button,'click',handler);} -appendChild(actionbar,button);});if(settings.styleWithCSS)exec('styleWithCSS');exec(defaultParagraphSeparatorString,defaultParagraphSeparator);return settings.element;};var pell={exec:exec,init:init};exports.exec=exec;exports.init=init;exports['default']=pell;Object.defineProperty(exports,'__esModule',{value:true});})));var TurndownService=(function(){'use strict';function extend(destination){for(var i=1;i0&&string[indexEnd-1]==='\n')indexEnd--;return string.substring(0,indexEnd)} -var blockElements=['ADDRESS','ARTICLE','ASIDE','AUDIO','BLOCKQUOTE','BODY','CANVAS','CENTER','DD','DIR','DIV','DL','DT','FIELDSET','FIGCAPTION','FIGURE','FOOTER','FORM','FRAMESET','H1','H2','H3','H4','H5','H6','HEADER','HGROUP','HR','HTML','ISINDEX','LI','MAIN','MENU','NAV','NOFRAMES','NOSCRIPT','OL','OUTPUT','P','PRE','SECTION','TABLE','TBODY','TD','TFOOT','TH','THEAD','TR','UL'];function isBlock(node){return is(node,blockElements)} -var voidElements=['AREA','BASE','BR','COL','COMMAND','EMBED','HR','IMG','INPUT','KEYGEN','LINK','META','PARAM','SOURCE','TRACK','WBR'];function isVoid(node){return is(node,voidElements)} -function hasVoid(node){return has(node,voidElements)} -var meaningfulWhenBlankElements=['A','TABLE','THEAD','TBODY','TFOOT','TH','TD','IFRAME','SCRIPT','AUDIO','VIDEO'];function isMeaningfulWhenBlank(node){return is(node,meaningfulWhenBlankElements)} -function hasMeaningfulWhenBlank(node){return has(node,meaningfulWhenBlankElements)} -function is(node,tagNames){return tagNames.indexOf(node.nodeName)>=0} -function has(node,tagNames){return(node.getElementsByTagName&&tagNames.some(function(tagName){return node.getElementsByTagName(tagName).length}))} -var rules={};rules.paragraph={filter:'p',replacement:function(content){return'\n\n'+content+'\n\n'}};rules.lineBreak={filter:'br',replacement:function(content,node,options){return options.br+'\n'}};rules.heading={filter:['h1','h2','h3','h4','h5','h6'],replacement:function(content,node,options){var hLevel=Number(node.nodeName.charAt(1));if(options.headingStyle==='setext'&&hLevel<3){var underline=repeat((hLevel===1?'=':'-'),content.length);return('\n\n'+content+'\n'+underline+'\n\n')}else{return'\n\n'+repeat('#',hLevel)+' '+content+'\n\n'}}};rules.blockquote={filter:'blockquote',replacement:function(content){content=content.replace(/^\n+|\n+$/g,'');content=content.replace(/^/gm,'> ');return'\n\n'+content+'\n\n'}};rules.list={filter:['ul','ol'],replacement:function(content,node){var parent=node.parentNode;if(parent.nodeName==='LI'&&parent.lastElementChild===node){return'\n'+content}else{return'\n\n'+content+'\n\n'}}};rules.listItem={filter:'li',replacement:function(content,node,options){content=content.replace(/^\n+/,'').replace(/\n+$/,'\n').replace(/\n/gm,'\n ');var prefix=options.bulletListMarker+' ';var parent=node.parentNode;if(parent.nodeName==='OL'){var start=parent.getAttribute('start');var index=Array.prototype.indexOf.call(parent.children,node);prefix=(start?Number(start)+index:index+1)+'. ';} -return(prefix+content+(node.nextSibling&&!/\n$/.test(content)?'\n':''))}};rules.indentedCodeBlock={filter:function(node,options){return(options.codeBlockStyle==='indented'&&node.nodeName==='PRE'&&node.firstChild&&node.firstChild.nodeName==='CODE')},replacement:function(content,node,options){return('\n\n '+ -node.firstChild.textContent.replace(/\n/g,'\n ')+'\n\n')}};rules.fencedCodeBlock={filter:function(node,options){return(options.codeBlockStyle==='fenced'&&node.nodeName==='PRE'&&node.firstChild&&node.firstChild.nodeName==='CODE')},replacement:function(content,node,options){var className=node.firstChild.getAttribute('class')||'';var language=(className.match(/language-(\S+)/)||[null,''])[1];var code=node.firstChild.textContent;var fenceChar=options.fence.charAt(0);var fenceSize=3;var fenceInCodeRegex=new RegExp('^'+fenceChar+'{3,}','gm');var match;while((match=fenceInCodeRegex.exec(code))){if(match[0].length>=fenceSize){fenceSize=match[0].length+1;}} -var fence=repeat(fenceChar,fenceSize);return('\n\n'+fence+language+'\n'+ -code.replace(/\n$/,'')+'\n'+fence+'\n\n')}};rules.horizontalRule={filter:'hr',replacement:function(content,node,options){return'\n\n'+options.hr+'\n\n'}};rules.inlineLink={filter:function(node,options){return(options.linkStyle==='inlined'&&node.nodeName==='A'&&node.getAttribute('href'))},replacement:function(content,node){var href=node.getAttribute('href');var title=cleanAttribute(node.getAttribute('title'));if(title)title=' "'+title+'"';return'['+content+']('+href+title+')'}};rules.referenceLink={filter:function(node,options){return(options.linkStyle==='referenced'&&node.nodeName==='A'&&node.getAttribute('href'))},replacement:function(content,node,options){var href=node.getAttribute('href');var title=cleanAttribute(node.getAttribute('title'));if(title)title=' "'+title+'"';var replacement;var reference;switch(options.linkReferenceStyle){case'collapsed':replacement='['+content+'][]';reference='['+content+']: '+href+title;break -case'shortcut':replacement='['+content+']';reference='['+content+']: '+href+title;break -default:var id=this.references.length+1;replacement='['+content+']['+id+']';reference='['+id+']: '+href+title;} -this.references.push(reference);return replacement},references:[],append:function(options){var references='';if(this.references.length){references='\n\n'+this.references.join('\n')+'\n\n';this.references=[];} -return references}};rules.emphasis={filter:['em','i'],replacement:function(content,node,options){if(!content.trim())return'' -return options.emDelimiter+content+options.emDelimiter}};rules.strong={filter:['strong','b'],replacement:function(content,node,options){if(!content.trim())return'' -return options.strongDelimiter+content+options.strongDelimiter}};rules.code={filter:function(node){var hasSiblings=node.previousSibling||node.nextSibling;var isCodeBlock=node.parentNode.nodeName==='PRE'&&!hasSiblings;return node.nodeName==='CODE'&&!isCodeBlock},replacement:function(content){if(!content)return'' -content=content.replace(/\r?\n|\r/g,' ');var extraSpace=/^`|^ .*?[^ ].* $|`$/.test(content)?' ':'';var delimiter='`';var matches=content.match(/`+/gm)||[];while(matches.indexOf(delimiter)!==-1)delimiter=delimiter+'`';return delimiter+extraSpace+content+extraSpace+delimiter}};rules.image={filter:'img',replacement:function(content,node){var alt=cleanAttribute(node.getAttribute('alt'));var src=node.getAttribute('src')||'';var title=cleanAttribute(node.getAttribute('title'));var titlePart=title?' "'+title+'"':'';return src?'!['+alt+']'+'('+src+titlePart+')':''}};function cleanAttribute(attribute){return attribute?attribute.replace(/(\n+\s*)+/g,'\n'):''} -function Rules(options){this.options=options;this._keep=[];this._remove=[];this.blankRule={replacement:options.blankReplacement};this.keepReplacement=options.keepReplacement;this.defaultRule={replacement:options.defaultReplacement};this.array=[];for(var key in options.rules)this.array.push(options.rules[key]);} -Rules.prototype={add:function(key,rule){this.array.unshift(rule);},keep:function(filter){this._keep.unshift({filter:filter,replacement:this.keepReplacement});},remove:function(filter){this._remove.unshift({filter:filter,replacement:function(){return''}});},forNode:function(node){if(node.isBlank)return this.blankRule -var rule;if((rule=findRule(this.array,node,this.options)))return rule -if((rule=findRule(this._keep,node,this.options)))return rule -if((rule=findRule(this._remove,node,this.options)))return rule -return this.defaultRule},forEach:function(fn){for(var i=0;i-1)return true}else if(typeof filter==='function'){if(filter.call(rule,node,options))return true}else{throw new TypeError('`filter` needs to be a string, array, or function')}} -function collapseWhitespace(options){var element=options.element;var isBlock=options.isBlock;var isVoid=options.isVoid;var isPre=options.isPre||function(node){return node.nodeName==='PRE'};if(!element.firstChild||isPre(element))return -var prevText=null;var keepLeadingWs=false;var prev=null;var node=next(prev,element,isPre);while(node!==element){if(node.nodeType===3||node.nodeType===4){var text=node.data.replace(/[ \r\n\t]+/g,' ');if((!prevText||/ $/.test(prevText.data))&&!keepLeadingWs&&text[0]===' '){text=text.substr(1);} -if(!text){node=remove(node);continue} -node.data=text;prevText=node;}else if(node.nodeType===1){if(isBlock(node)||node.nodeName==='BR'){if(prevText){prevText.data=prevText.data.replace(/ $/,'');} -prevText=null;keepLeadingWs=false;}else if(isVoid(node)||isPre(node)){prevText=null;keepLeadingWs=true;}else if(prevText){keepLeadingWs=false;}}else{node=remove(node);continue} -var nextNode=next(prev,node,isPre);prev=node;node=nextNode;} -if(prevText){prevText.data=prevText.data.replace(/ $/,'');if(!prevText.data){remove(prevText);}}} -function remove(node){var next=node.nextSibling||node.parentNode;node.parentNode.removeChild(node);return next} -function next(prev,current,isPre){if((prev&&prev.parentNode===current)||isPre(current)){return current.nextSibling||current.parentNode} -return current.firstChild||current.nextSibling||current.parentNode} -var root=(typeof window!=='undefined'?window:{});function canParseHTMLNatively(){var Parser=root.DOMParser;var canParse=false;try{if(new Parser().parseFromString('','text/html')){canParse=true;}}catch(e){} -return canParse} -function createHTMLParser(){var Parser=function(){};{if(shouldUseActiveX()){Parser.prototype.parseFromString=function(string){var doc=new window.ActiveXObject('htmlfile');doc.designMode='on';doc.open();doc.write(string);doc.close();return doc};}else{Parser.prototype.parseFromString=function(string){var doc=document.implementation.createHTMLDocument('');doc.open();doc.write(string);doc.close();return doc};}} -return Parser} -function shouldUseActiveX(){var useActiveX=false;try{document.implementation.createHTMLDocument('').open();}catch(e){if(window.ActiveXObject)useActiveX=true;} -return useActiveX} -var HTMLParser=canParseHTMLNatively()?root.DOMParser:createHTMLParser();function RootNode(input,options){var root;if(typeof input==='string'){var doc=htmlParser().parseFromString(''+input+'','text/html');root=doc.getElementById('turndown-root');}else{root=input.cloneNode(true);} -collapseWhitespace({element:root,isBlock:isBlock,isVoid:isVoid,isPre:options.preformattedCode?isPreOrCode:null});return root} -var _htmlParser;function htmlParser(){_htmlParser=_htmlParser||new HTMLParser();return _htmlParser} -function isPreOrCode(node){return node.nodeName==='PRE'||node.nodeName==='CODE'} -function Node(node,options){node.isBlock=isBlock(node);node.isCode=node.nodeName==='CODE'||node.parentNode.isCode;node.isBlank=isBlank(node);node.flankingWhitespace=flankingWhitespace(node,options);return node} -function isBlank(node){return(!isVoid(node)&&!isMeaningfulWhenBlank(node)&&/^\s*$/i.test(node.textContent)&&!hasVoid(node)&&!hasMeaningfulWhenBlank(node))} -function flankingWhitespace(node,options){if(node.isBlock||(options.preformattedCode&&node.isCode)){return{leading:'',trailing:''}} -var edges=edgeWhitespace(node.textContent);if(edges.leadingAscii&&isFlankedByWhitespace('left',node,options)){edges.leading=edges.leadingNonAscii;} -if(edges.trailingAscii&&isFlankedByWhitespace('right',node,options)){edges.trailing=edges.trailingNonAscii;} -return{leading:edges.leading,trailing:edges.trailing}} -function edgeWhitespace(string){var m=string.match(/^(([ \t\r\n]*)(\s*))[\s\S]*?((\s*?)([ \t\r\n]*))$/);return{leading:m[1],leadingAscii:m[2],leadingNonAscii:m[3],trailing:m[4],trailingNonAscii:m[5],trailingAscii:m[6]}} -function isFlankedByWhitespace(side,node,options){var sibling;var regExp;var isFlanked;if(side==='left'){sibling=node.previousSibling;regExp=/ $/;}else{sibling=node.nextSibling;regExp=/^ /;} -if(sibling){if(sibling.nodeType===3){isFlanked=regExp.test(sibling.nodeValue);}else if(options.preformattedCode&&sibling.nodeName==='CODE'){isFlanked=false;}else if(sibling.nodeType===1&&!isBlock(sibling)){isFlanked=regExp.test(sibling.textContent);}} -return isFlanked} -var reduce=Array.prototype.reduce;var escapes=[[/\\/g,'\\\\'],[/\*/g,'\\*'],[/^-/g,'\\-'],[/^\+ /g,'\\+ '],[/^(=+)/g,'\\$1'],[/^(#{1,6}) /g,'\\$1 '],[/`/g,'\\`'],[/^~~~/g,'\\~~~'],[/\[/g,'\\['],[/\]/g,'\\]'],[/^>/g,'\\>'],[/_/g,'\\_'],[/^(\d+)\. /g,'$1\\. ']];function TurndownService(options){if(!(this instanceof TurndownService))return new TurndownService(options) -var defaults={rules:rules,headingStyle:'setext',hr:'* * *',bulletListMarker:'*',codeBlockStyle:'indented',fence:'```',emDelimiter:'_',strongDelimiter:'**',linkStyle:'inlined',linkReferenceStyle:'full',br:' ',preformattedCode:false,blankReplacement:function(content,node){return node.isBlock?'\n\n':''},keepReplacement:function(content,node){return node.isBlock?'\n\n'+node.outerHTML+'\n\n':node.outerHTML},defaultReplacement:function(content,node){return node.isBlock?'\n\n'+content+'\n\n':content}};this.options=extend({},defaults,options);this.rules=new Rules(this.options);} -TurndownService.prototype={turndown:function(input){if(!canConvert(input)){throw new TypeError(input+' is not a string, or an element/document/fragment node.')} -if(input==='')return'' -var output=process.call(this,new RootNode(input,this.options));return postProcess.call(this,output)},use:function(plugin){if(Array.isArray(plugin)){for(var i=0;i=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+e.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism);Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript;!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",a={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},n={bash:a,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},a.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=n.variable[1].inside,i=0;i>/g,(function(e,s){return"(?:"+n[+s]+")"}))}function s(e,s,a){return RegExp(n(e,s),a||"")}function a(e,n){for(var s=0;s>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var t="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(t+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(t+" "+r+" "+o),g=a("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),b=a("\\((?:[^()]|<>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=n("<<0>>(?:\\s*<<1>>)?",[h,g]),m=n("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=n("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=n("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k]),v=n("\\(<<0>>+(?:,<<0>>+)+\\)",[w]),x=n("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[v,m,k]),$={keyword:p,punctuation:/[<>()?,.:[\]]/},_="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",B='"(?:\\\\.|[^\\\\"\r\n])*"';e.languages.csharp=e.languages.extend("clike",{string:[{pattern:s("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:s("(^|[^@$\\\\])<<0>>",[B]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:s("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:$},{pattern:s("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,x]),lookbehind:!0,inside:$},{pattern:s("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:s("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:$},{pattern:s("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:$},{pattern:s("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:s("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:$},{pattern:s("\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[x,u,h]),inside:$}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:s("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:s("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:s("(\\b(?:default|sizeof|typeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:$},"return-type":{pattern:s("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[x,m]),inside:$,alias:"class-name"},"constructor-invocation":{pattern:s("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[x]),lookbehind:!0,inside:$,alias:"class-name"},"generic-method":{pattern:s("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:s("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:$}}},"type-list":{pattern:s("\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,x,p.source,b,"\\bnew\\s*\\(\\s*\\)"]),lookbehind:!0,inside:{"record-arguments":{pattern:s("(^(?!new\\s*\\()<<0>>\\s*)<<1>>",[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:p,"class-name":{pattern:RegExp(x),greedy:!0,inside:$},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var E=B+"|"+_,R=n("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[E]),z=a(n("[^\"'/()]|<<0>>|\\(<>*\\)",[R]),2),S="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",j=n("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,z]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:s("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[S,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:s("^<<0>>(?=\\s*:)",[S]),alias:"keyword"},"attribute-arguments":{pattern:s("\\(<<0>>*\\)",[z]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var A=":[^}\r\n]+",F=a(n("[^\"'/()]|<<0>>|\\(<>*\\)",[R]),2),P=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[F,A]),U=a(n("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)",[E]),2),Z=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[U,A]);function q(n,a){return{interpolation:{pattern:s("((?:^|[^{])(?:\\{\\{)*)<<0>>",[n]),lookbehind:!0,inside:{"format-string":{pattern:s("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[a,A]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:s('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[P]),lookbehind:!0,greedy:!0,inside:q(P,F)},{pattern:s('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[Z]),lookbehind:!0,greedy:!0,inside:q(Z,U)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism);!function(e){var a=[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],n="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp(n+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}}}};e.languages.dart=e.languages.extend("clike",{"class-name":[s,{pattern:RegExp(n+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:s.inside}],keyword:a,operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),e.languages.insertBefore("dart","string",{"string-literal":{pattern:/r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,lookbehind:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:e.languages.dart}}},string:/[\s\S]+/}},string:void 0}),e.languages.insertBefore("dart","class-name",{metadata:{pattern:/@\w+/,alias:"function"}}),e.languages.insertBefore("dart","class-name",{generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":s,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism);Prism.languages.go=Prism.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),Prism.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete Prism.languages.go["class-name"];Prism.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:Prism.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},Prism.hooks.add("after-tokenize",(function(n){if("graphql"===n.language)for(var t=n.tokens.filter((function(n){return"string"!=typeof n&&"comment"!==n.type&&"scalar"!==n.type})),e=0;e0)){var s=f(/^\{$/,/^\}$/);if(-1===s)continue;for(var u=e;u=0&&b(p,"variable-input")}}}}function l(n){return t[e+n]}function c(n,t){t=t||0;for(var e=0;e=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,t="(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp("(^|[^\\w.])"+t+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[s,{pattern:RegExp("(^|[^\\w.])"+t+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)"),lookbehind:!0,inside:s.inside},{pattern:RegExp("(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)"+t+"[A-Z]\\w*\\b"),lookbehind:!0,inside:s.inside}],keyword:n,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":s,keyword:n,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp("(\\bimport\\s+)"+t+"(?:[A-Z]\\w*|\\*)(?=\\s*;)"),lookbehind:!0,inside:{namespace:s.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp("(\\bimport\\s+static\\s+)"+t+"(?:\\w+|\\*)(?=\\s*;)"),lookbehind:!0,alias:"static",inside:{namespace:s.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,(function(){return n.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism);Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json;!function(n){n.languages.kotlin=n.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"];var e={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:n.languages.kotlin}};n.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:e},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:e},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete n.languages.kotlin.string,n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin}(Prism);!function(e){function n(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(t,a,r,o){if(t.language===a){var c=t.tokenStack=[];t.code=t.code.replace(r,(function(e){if("function"==typeof o&&!o(e))return e;for(var r,i=c.length;-1!==t.code.indexOf(r=n(a,i));)++i;return c[i]=e,r})),t.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(t,a){if(t.language===a&&t.tokenStack){t.grammar=e.languages[a];var r=0,o=Object.keys(t.tokenStack);!function c(i){for(var u=0;u=o.length);u++){var g=i[u];if("string"==typeof g||g.content&&"string"==typeof g.content){var l=o[r],s=t.tokenStack[l],f="string"==typeof g?g:g.content,p=n(a,l),k=f.indexOf(p);if(k>-1){++r;var m=f.substring(0,k),d=new e.Token(a,e.tokenize(s,t.grammar),"language-"+a,s),h=f.substring(k+p.length),v=[];m&&v.push.apply(v,c([m])),v.push(d),h&&v.push.apply(v,c([h])),"string"==typeof g?i.splice.apply(i,[u,1].concat(v)):g.content=v}}else g.content&&c(g.content)}return i}(t.tokens)}}}})}(Prism);!function(e){var a=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,n=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:a,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];e.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:a,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(a){/<\?/.test(a.code)&&e.languages["markup-templating"].buildPlaceholders(a,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"php")}))}(Prism);!function(e){var i=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};i.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:i},boolean:i.boolean,variable:i.variable}}(Prism);Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python;!function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var n={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var t="(?:"+["([^a-zA-Z0-9\\s{(\\[<=])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","\\((?:[^()\\\\]|\\\\[^]|\\((?:[^()\\\\]|\\\\[^])*\\))*\\)","\\{(?:[^{}\\\\]|\\\\[^]|\\{(?:[^{}\\\\]|\\\\[^])*\\})*\\}","\\[(?:[^\\[\\]\\\\]|\\\\[^]|\\[(?:[^\\[\\]\\\\]|\\\\[^])*\\])*\\]","<(?:[^<>\\\\]|\\\\[^]|<(?:[^<>\\\\]|\\\\[^])*>)*>"].join("|")+")",i='(?:"(?:\\\\.|[^"\\\\\r\n])*"|(?:\\b[a-zA-Z_]\\w*|[^\\s\0-\\x7F]+)[?!]?|\\$.)';e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp("%r"+t+"[egimnosux]{0,6}"),greedy:!0,inside:{interpolation:n,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:n,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp("(^|[^:]):"+i),lookbehind:!0,greedy:!0},{pattern:RegExp("([\r\n{(,][ \t]*)"+i+"(?=:(?!:))"),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp("%[qQiIwWs]?"+t),greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:n,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp("%x"+t),greedy:!0,inside:{interpolation:n,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:n,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism);Prism.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp('(^|[^"#])(?:"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^(])|[^\\\\\r\n"])*"|"""(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\"]|"(?!""))*""")(?!["#])'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp('(^|[^"#])(#+)(?:"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^#])|[^\\\\\r\n])*?"|"""(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?""")\\2'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp("#(?:(?:elseif|if)\\b(?:[ \t]*(?:![ \t]*)?(?:\\b\\w+\\b(?:[ \t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \t]*(?:&&|\\|\\|))?)+|(?:else|endif)\\b)"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},Prism.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=Prism.languages.swift}));!function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var s=e.languages.extend("typescript",{});delete s["class-name"],e.languages.typescript["class-name"].inside=s,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:s}}}}),e.languages.ts=e.languages.typescript}(Prism);!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism);!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e="line-numbers",n=/\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(n,t){if("PRE"===n.tagName&&n.classList.contains(e)){var i=n.querySelector(".line-numbers-rows");if(i){var r=parseInt(n.getAttribute("data-start"),10)||1,s=r+(i.children.length-1);ts&&(t=s);var l=t-r;return i.children[l]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},i=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&i===window.innerWidth||(i=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var i=t.element,s=i.parentNode;if(s&&/pre/i.test(s.nodeName)&&!i.querySelector(".line-numbers-rows")&&Prism.util.isActive(i,e)){i.classList.remove(e),s.classList.add(e);var l,o=t.code.match(n),a=o?o.length+1:1,u=new Array(a+1).join("");(l=document.createElement("span")).setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=u,s.hasAttribute("data-start")&&(s.style.counterReset="linenumber "+(parseInt(s.getAttribute("data-start"),10)-1)),t.element.appendChild(l),r([s]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getComputedStyle?getComputedStyle(n):n.currentStyle||null:null)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var t=e.map((function(e){var t=e.querySelector("code"),i=e.querySelector(".line-numbers-rows");if(t&&i){var r=e.querySelector(".line-numbers-sizer"),s=t.textContent.split(n);r||((r=document.createElement("span")).className="line-numbers-sizer",t.appendChild(r)),r.innerHTML="0",r.style.display="block";var l=r.getBoundingClientRect().height;return r.innerHTML="",{element:e,lines:s,lineHeights:[],oneLinerHeight:l,sizer:r}}})).filter(Boolean);t.forEach((function(e){var n=e.sizer,t=e.lines,i=e.lineHeights,r=e.oneLinerHeight;i[t.length-1]=void 0,t.forEach((function(e,t){if(e&&e.length>1){var s=n.appendChild(document.createElement("span"));s.style.display="block",s.textContent=e}else i[t]=r}))})),t.forEach((function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;r{};} -let self=this;const REGEX_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;const REGEX_FUNCTION_PARAMS=/(?:\s*(?:function\s*[^(]*)?\s*)((?:[^'"]|(?:(?:(['"])(?:(?:.*?[^\\]\2)|\2))))*?)\s*(?=(?:=>)|{)/m;const REGEX_PARAMETERS_VALUES=/\s*([\w\\$]+)\s*(?:=\s*((?:(?:(['"])(?:\3|(?:.*?[^\\]\3)))((\s*\+\s*)(?:(?:(['"])(?:\6|(?:.*?[^\\]\6)))|(?:[\w$]*)))*)|.*?))?\s*(?:,|$)/gm;function getParams(func){let functionAsString=func.toString();let params=[];let match;functionAsString=functionAsString.replace(REGEX_COMMENTS,'');functionAsString=functionAsString.match(REGEX_FUNCTION_PARAMS)[1];if(functionAsString.charAt(0)==='('){functionAsString=functionAsString.slice(1,-1);} -while(match=REGEX_PARAMETERS_VALUES.exec(functionAsString)){params.push(match[1]);} -return params;} -let args=getParams(target);return target.apply(target,args.map(function(value){return self.get(value.trim());}));};let path=function(path,value,type){type=(type)?type:'assign';path=container.scope(path).split('.');let name=path.shift();let object=container.get(name);let result=null;while(path.length>1){if(!object){return null;} -object=object[path.shift()];} -let shift=path.shift();if(value!==null&&value!==undefined&&object&&shift&&(object[shift]!==undefined||object[shift]!==null)){switch(type){case'append':if(!Array.isArray(object[shift])){object[shift]=[];} -object[shift].push(value);break;case'prepend':if(!Array.isArray(object[shift])){object[shift]=[];} -object[shift].unshift(value);break;case'splice':if(!Array.isArray(object[shift])){object[shift]=[];} -object[shift].splice(value,1);break;default:object[shift]=value;} -return true;} -if(!object){return null;} -if(!shift){result=object;} -else{return object[shift];} -return result;};let bind=function(element,path,callback){let event=container.scope(path)+'.changed';let service=event.split('.').slice(0,1).pop();let debug=element.getAttribute('data-debug')||false;listeners[service]=listeners[service]||{};listeners[service][event]=true;let printer=(function(x){return function(){if(!document.body.contains(element)){element=null;document.removeEventListener(event,printer,false);return false;} -let oldNamespaces=namespaces;namespaces=x;callback();namespaces=oldNamespaces;}}(Object.assign({},namespaces)));document.addEventListener(event,printer);};let addNamespace=function(key,scope){namespaces[key]=scope;return this;} -let removeNamespace=function(key){delete namespaces[key];return this;} -let scope=function(path){for(let[key,value]of Object.entries(namespaces)){path=(path.indexOf('.')>-1)?path.replace(key+'.',value+'.'):path.replace(key,value);} -return path;} -let container={set:set,get:get,resolve:resolve,path:path,bind:bind,scope:scope,addNamespace:addNamespace,removeNamespace:removeNamespace,stock:stock,listeners:listeners,namespaces:namespaces,};set('container',container,true,false);return container;}();window.ls.container.set('http',function(document){let globalParams=[],globalHeaders=[];let addParam=function(url,param,value){param=encodeURIComponent(param);let a=document.createElement('a');param+=(value?"="+encodeURIComponent(value):"");a.href=url;a.search+=(a.search?"&":"")+param;return a.href;};let request=function(method,url,headers,payload,progress){let i;if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('var method must contain a valid HTTP method name');} -if(typeof url!=='string'){throw new Error('var url must be of type string');} -if(typeof headers!=='object'){throw new Error('var headers must be of type object');} -if(typeof url!=='string'){throw new Error('var url must be of type string');} -for(i=0;i-1?part.substr(0,eq):part;let val=eq>-1?decodeURIComponent(part.substr(eq+1)):'';let from=key.indexOf('[');if(from===-1){result[decodeURIComponent(key)]=val;} -else{let to=key.indexOf(']');let index=decodeURIComponent(key.substring(from+1,to));key=decodeURIComponent(key.substring(0,from));if(!result[key]){result[key]=[];} -if(!index){result[key].push(val);} -else{result[key][index]=val;}}});return result;};let states=[];let params=getJsonFromUrl(window.location.search);let hash=window.location.hash;let current=null;let previous=null;let getPrevious=()=>previous;let getCurrent=()=>current;let setPrevious=(value)=>{previous=value;return this;};let setCurrent=(value)=>{current=value;return this;};let setParam=function(key,value){params[key]=value;return this;};let getParam=function(key,def){if(key in params){return params[key];} -return def;};let getParams=function(){return params;};let getURL=function(){return window.location.href;};let add=function(path,view){if(typeof path!=='string'){throw new Error('path must be of type string');} -if(typeof view!=='object'){throw new Error('view must be of type object');} -states[states.length++]={path:path,view:view};return this;};let match=function(location){let url=location.pathname;if(url.endsWith('/')){url=url.slice(0,-1);} -states.sort(function(a,b){return b.path.length-a.path.length;});states.sort(function(a,b){let n=b.path.split('/').length-a.path.split('/').length;if(n!==0){return n;} -return b.path.length-a.path.length;});for(let i=0;i{let reference=match.substring(2,match.length-2).replace('[\'','.').replace('\']','').trim();reference=reference.split('|');let path=container.scope((reference[0]||''));let result=container.path(path);path=container.scope(path);if(!paths.includes(path)){paths.push(path);} -if(reference.length>=2){for(let i=1;ipaths,}},true,false);window.ls.container.set('filter',function(container){let filters={};let add=function(name,callback){filters[name]=callback;return this;};let apply=function(name,value){container.set('$value',value,true,false);return container.resolve(filters[name]);};add('uppercase',($value)=>{if(typeof $value!=='string'){return $value;} -return $value.toUpperCase();});add('lowercase',($value)=>{if(typeof $value!=='string'){return $value;} -return $value.toLowerCase();});return{add:add,apply:apply}},true,false);window.ls.container.get('filter').add('escape',$value=>{if(typeof $value!=='string'){return $value;} -return $value.replace(/&/g,'&').replace(//g,'>').replace(/\"/g,'"').replace(/\'/g,''').replace(/\//g,'/');});window.ls=window.ls||{};window.ls.container.set('window',window,true,false).set('document',window.document,true,false).set('element',window.document,true,false);window.ls.run=function(window){try{this.view.render(window.document);} -catch(error){let handler=window.ls.container.resolve(this.error);handler(error);}};window.ls.error=()=>{return error=>{console.error('ls-error',error.message,error.stack,error.toString());}};window.ls.router=window.ls.container.get('router');window.ls.view=window.ls.container.get('view');window.ls.filter=window.ls.container.get('filter');window.ls.container.get('view').add({selector:'data-ls-router',controller:function(element,window,document,view,router){let firstFromServer=(element.getAttribute('data-first-from-server')==='true');let scope={selector:'data-ls-scope',template:false,repeat:true,controller:function(){},};let init=function(route){let count=parseInt(element.getAttribute('data-ls-scope-count')||0);element.setAttribute('data-ls-scope-count',count+1);window.scrollTo(0,0);if(window.document.body.scrollTo){window.document.body.scrollTo(0,0);} -router.reset();if(null===route){return;} -scope.template=(undefined!==route.view.template)?route.view.template:null;scope.controller=(undefined!==route.view.controller)?route.view.controller:function(){};document.dispatchEvent(new CustomEvent('state-change'));if(firstFromServer&&null===router.getPrevious()){scope.template='';document.dispatchEvent(new CustomEvent('state-changed'));} -else if(count===1){view.render(element,function(){document.dispatchEvent(new CustomEvent('state-changed'));});} -else if(null!==router.getPrevious()){view.render(element,function(){document.dispatchEvent(new CustomEvent('state-changed'));});}};let findParent=function(tagName,el){if((el.nodeName||el.tagName).toLowerCase()===tagName.toLowerCase()){return el;} -while(el=el.parentNode){if((el.nodeName||el.tagName).toLowerCase()===tagName.toLowerCase()){return el;}} -return null;};element.removeAttribute('data-ls-router');element.setAttribute('data-ls-scope','');element.setAttribute('data-ls-scope-count',1);view.add(scope);document.addEventListener('click',function(event){let target=findParent('a',event.target);if(!target){return false;} -if(!target.href){return false;} -if((event.metaKey)){return false;} -if((target.hasAttribute('target'))&&('_blank'===target.getAttribute('target'))){return false;} -if(target.hostname!==window.location.hostname){return false;} -let route=router.match(target);if(null===route){return false;} -event.preventDefault();if(window.location===target.href){return false;} -route.view.state=(undefined===route.view.state)?true:route.view.state;if(true===route.view.state){if(router.getPrevious()&&router.getPrevious().view&&(router.getPrevious().view.scope!==route.view.scope)){window.location.href=target.href;return false;} -window.history.pushState({},'Unknown',target.href);} -init(route);return true;});window.addEventListener('popstate',function(){init(router.match(window.location));});window.addEventListener('hashchange',function(){init(router.match(window.location));});init(router.match(window.location));}});window.ls.container.get('view').add({selector:'data-ls-attrs',controller:function(element,expression,container){let attrs=element.getAttribute('data-ls-attrs').trim().split(',');let paths=[];let debug=element.getAttribute('data-debug')||false;let check=()=>{container.set('element',element,true,false);if(debug){console.info('debug-ls-attrs attributes:',attrs);} -for(let i=0;i{for(let i=0;i-1));value=element.value;} -catch{return null;}} -if(bind){element.addEventListener('change',()=>{for(let i=0;i-1){value.splice(index,1);} -container.path(paths[i],value);}});} -return;} -if(element.value!==value){element.value=value;element.dispatchEvent(new Event('change'));} -if(bind){element.addEventListener('input',sync);element.addEventListener('change',sync);}} -else{if(element.textContent!=value){element.textContent=value;}}};let sync=(()=>{return()=>{if(debug){console.info('debug-ls-bind','sync-path',paths);console.info('debug-ls-bind','sync-syntax',syntax);console.info('debug-ls-bind','sync-syntax-parsed',parsedSyntax);console.info('debug-ls-bind','sync-value',element.value);} -for(let i=0;i{echo(expression.parse(parsedSyntax),false);});path.pop();}}}});window.ls.container.get('view').add({selector:'data-ls-if',controller:function(element,expression,container,view){let result='';let syntax=element.getAttribute('data-ls-if')||'';let debug=element.getAttribute('data-debug')||false;let paths=[];let check=()=>{if(debug){console.info('debug-ls-if',expression.parse(syntax.replace(/(\r\n|\n|\r)/gm,' '),'undefined',true));} -try{result=(eval(expression.parse(syntax.replace(/(\r\n|\n|\r)/gm,' '),'undefined',true)));} -catch(error){throw new Error('Failed to evaluate expression "'+syntax+' (resulted with: "'+result+'")": '+error);} -if(debug){console.info('debug-ls-if result:',result);} -paths=expression.getPaths();let prv=element.$lsSkip;element.$lsSkip=!result;if(!result){element.style.visibility='hidden';element.style.display='none';} -else{element.style.removeProperty('display');element.style.removeProperty('visibility');} -if(prv===true&&element.$lsSkip===false){view.render(element)}};check();for(let i=0;i{let context=expr+'.'+index;container.addNamespace(as,context);if(debug){console.info('debug-ls-loop','index',index);console.info('debug-ls-loop','context',context);console.info('debug-ls-loop','context-path',container.path(context).name);console.info('debug-ls-loop','namespaces',container.namespaces);} -container.set(as,container.path(context),true,watch);container.set(key,index,true,false);view.render(children[prop]);container.removeNamespace(as);})(prop);} -element.dispatchEvent(new Event('looped'));};let template=(element.children.length===1)?element.children[0]:window.document.createElement('li');echo();container.bind(element,expr+'.length',echo);let path=(expr+'.length').split('.');while(path.length){container.bind(element,path.join('.'),echo);path.pop();}}});window.ls.container.get('view').add({selector:'data-ls-template',template:false,controller:function(element,view,http,expression,document,container){let template=element.getAttribute('data-ls-template')||'';let type=element.getAttribute('data-type')||'url';let debug=element.getAttribute('data-debug')||false;let paths=[];let check=function(init=false){let source=expression.parse(template);paths=expression.getPaths();element.innerHTML='';if('script'===type){let inlineTemplate=document.getElementById(source);if(inlineTemplate&&inlineTemplate.innerHTML){element.innerHTML=inlineTemplate.innerHTML;element.dispatchEvent(new CustomEvent('template-loaded',{bubbles:true,cancelable:false}));} -else{if(debug){console.error('Missing template "'+source+'"');}} -if(!init){view.render(element);} -return;} -http.get(source).then(function(element){return function(data){element.innerHTML=data;view.render(element);element.dispatchEvent(new CustomEvent('template-loaded',{bubbles:true,cancelable:false}));}}(element),function(){throw new Error('Failed loading template');});};check(true);for(let i=0;i{var flushPending=false;var flushing=false;var queue=[];function scheduler(callback){queueJob(callback);} -function queueJob(job){if(!queue.includes(job)) -queue.push(job);queueFlush();} -function queueFlush(){if(!flushing&&!flushPending){flushPending=true;queueMicrotask(flushJobs);}} -function flushJobs(){flushPending=false;flushing=true;for(let i=0;iengine.effect(callback,{scheduler:(task)=>{if(shouldSchedule){scheduler(task);}else{task();}}});raw=engine.raw;} -function overrideEffect(override){effect=override;} -function elementBoundEffect(el){let cleanup2=()=>{};let wrappedEffect=(callback)=>{let effectReference=effect(callback);if(!el._x_effects){el._x_effects=new Set();el._x_runEffects=()=>{el._x_effects.forEach((i)=>i());};} -el._x_effects.add(effectReference);cleanup2=()=>{if(effectReference===void 0) -return;el._x_effects.delete(effectReference);release(effectReference);};};return[wrappedEffect,()=>{cleanup2();}];} -var onAttributeAddeds=[];var onElRemoveds=[];var onElAddeds=[];function onElAdded(callback){onElAddeds.push(callback);} -function onElRemoved(callback){onElRemoveds.push(callback);} -function onAttributesAdded(callback){onAttributeAddeds.push(callback);} -function onAttributeRemoved(el,name,callback){if(!el._x_attributeCleanups) -el._x_attributeCleanups={};if(!el._x_attributeCleanups[name]) -el._x_attributeCleanups[name]=[];el._x_attributeCleanups[name].push(callback);} -function cleanupAttributes(el,names){if(!el._x_attributeCleanups) -return;Object.entries(el._x_attributeCleanups).forEach(([name,value])=>{if(names===void 0||names.includes(name)){value.forEach((i)=>i());delete el._x_attributeCleanups[name];}});} -var observer=new MutationObserver(onMutate);var currentlyObserving=false;function startObservingMutations(){observer.observe(document,{subtree:true,childList:true,attributes:true,attributeOldValue:true});currentlyObserving=true;} -function stopObservingMutations(){flushObserver();observer.disconnect();currentlyObserving=false;} -var recordQueue=[];var willProcessRecordQueue=false;function flushObserver(){recordQueue=recordQueue.concat(observer.takeRecords());if(recordQueue.length&&!willProcessRecordQueue){willProcessRecordQueue=true;queueMicrotask(()=>{processRecordQueue();willProcessRecordQueue=false;});}} -function processRecordQueue(){onMutate(recordQueue);recordQueue.length=0;} -function mutateDom(callback){if(!currentlyObserving) -return callback();stopObservingMutations();let result=callback();startObservingMutations();return result;} -var isCollecting=false;var deferredMutations=[];function deferMutations(){isCollecting=true;} -function flushAndStopDeferringMutations(){isCollecting=false;onMutate(deferredMutations);deferredMutations=[];} -function onMutate(mutations){if(isCollecting){deferredMutations=deferredMutations.concat(mutations);return;} -let addedNodes=[];let removedNodes=[];let addedAttributes=new Map();let removedAttributes=new Map();for(let i=0;inode.nodeType===1&&addedNodes.push(node));mutations[i].removedNodes.forEach((node)=>node.nodeType===1&&removedNodes.push(node));} -if(mutations[i].type==="attributes"){let el=mutations[i].target;let name=mutations[i].attributeName;let oldValue=mutations[i].oldValue;let add2=()=>{if(!addedAttributes.has(el)) -addedAttributes.set(el,[]);addedAttributes.get(el).push({name,value:el.getAttribute(name)});};let remove=()=>{if(!removedAttributes.has(el)) -removedAttributes.set(el,[]);removedAttributes.get(el).push(name);};if(el.hasAttribute(name)&&oldValue===null){add2();}else if(el.hasAttribute(name)){remove();add2();}else{remove();}}} -removedAttributes.forEach((attrs,el)=>{cleanupAttributes(el,attrs);});addedAttributes.forEach((attrs,el)=>{onAttributeAddeds.forEach((i)=>i(el,attrs));});for(let node of addedNodes){if(removedNodes.includes(node)) -continue;onElAddeds.forEach((i)=>i(node));} -for(let node of removedNodes){if(addedNodes.includes(node)) -continue;onElRemoveds.forEach((i)=>i(node));} -addedNodes=null;removedNodes=null;addedAttributes=null;removedAttributes=null;} -function addScopeToNode(node,data2,referenceNode){node._x_dataStack=[data2,...closestDataStack(referenceNode||node)];return()=>{node._x_dataStack=node._x_dataStack.filter((i)=>i!==data2);};} -function refreshScope(element,scope){let existingScope=element._x_dataStack[0];Object.entries(scope).forEach(([key,value])=>{existingScope[key]=value;});} -function closestDataStack(node){if(node._x_dataStack) -return node._x_dataStack;if(typeof ShadowRoot==="function"&&node instanceof ShadowRoot){return closestDataStack(node.host);} -if(!node.parentNode){return[];} -return closestDataStack(node.parentNode);} -function mergeProxies(objects){let thisProxy=new Proxy({},{ownKeys:()=>{return Array.from(new Set(objects.flatMap((i)=>Object.keys(i))));},has:(target,name)=>{return objects.some((obj)=>obj.hasOwnProperty(name));},get:(target,name)=>{return(objects.find((obj)=>{if(obj.hasOwnProperty(name)){let descriptor=Object.getOwnPropertyDescriptor(obj,name);if(descriptor.get&&descriptor.get._x_alreadyBound||descriptor.set&&descriptor.set._x_alreadyBound){return true;} -if((descriptor.get||descriptor.set)&&descriptor.enumerable){let getter=descriptor.get;let setter=descriptor.set;let property=descriptor;getter=getter&&getter.bind(thisProxy);setter=setter&&setter.bind(thisProxy);if(getter) -getter._x_alreadyBound=true;if(setter) -setter._x_alreadyBound=true;Object.defineProperty(obj,name,{...property,get:getter,set:setter});} -return true;} -return false;})||{})[name];},set:(target,name,value)=>{let closestObjectWithKey=objects.find((obj)=>obj.hasOwnProperty(name));if(closestObjectWithKey){closestObjectWithKey[name]=value;}else{objects[objects.length-1][name]=value;} -return true;}});return thisProxy;} -function initInterceptors(data2){let isObject2=(val)=>typeof val==="object"&&!Array.isArray(val)&&val!==null;let recurse=(obj,basePath="")=>{Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key,{value,enumerable}])=>{if(enumerable===false||value===void 0) -return;let path=basePath===""?key:`${basePath}.${key}`;if(typeof value==="object"&&value!==null&&value._x_interceptor){obj[key]=value.initialize(data2,path,key);}else{if(isObject2(value)&&value!==obj&&!(value instanceof Element)){recurse(value,path);}}});};return recurse(data2);} -function interceptor(callback,mutateObj=()=>{}){let obj={initialValue:void 0,_x_interceptor:true,initialize(data2,path,key){return callback(this.initialValue,()=>get(data2,path),(value)=>set(data2,path,value),path,key);}};mutateObj(obj);return(initialValue)=>{if(typeof initialValue==="object"&&initialValue!==null&&initialValue._x_interceptor){let initialize=obj.initialize.bind(obj);obj.initialize=(data2,path,key)=>{let innerValue=initialValue.initialize(data2,path,key);obj.initialValue=innerValue;return initialize(data2,path,key);};}else{obj.initialValue=initialValue;} -return obj;};} -function get(obj,path){return path.split(".").reduce((carry,segment)=>carry[segment],obj);} -function set(obj,path,value){if(typeof path==="string") -path=path.split(".");if(path.length===1) -obj[path[0]]=value;else if(path.length===0) -throw error;else{if(obj[path[0]]) -return set(obj[path[0]],path.slice(1),value);else{obj[path[0]]={};return set(obj[path[0]],path.slice(1),value);}}} -var magics={};function magic(name,callback){magics[name]=callback;} -function injectMagics(obj,el){Object.entries(magics).forEach(([name,callback])=>{Object.defineProperty(obj,`$${name}`,{get(){return callback(el,{Alpine:alpine_default,interceptor});},enumerable:false});});return obj;} -function tryCatch(el,expression,callback,...args){try{return callback(...args);}catch(e){handleError(e,el,expression);}} -function handleError(error2,el,expression=void 0){Object.assign(error2,{el,expression});console.warn(`Alpine Expression Error: ${error2.message} - - ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`,el);setTimeout(()=>{throw error2;},0);} -function evaluate(el,expression,extras={}){let result;evaluateLater(el,expression)((value)=>result=value,extras);return result;} -function evaluateLater(...args){return theEvaluatorFunction(...args);} -var theEvaluatorFunction=normalEvaluator;function setEvaluator(newEvaluator){theEvaluatorFunction=newEvaluator;} -function normalEvaluator(el,expression){let overriddenMagics={};injectMagics(overriddenMagics,el);let dataStack=[overriddenMagics,...closestDataStack(el)];if(typeof expression==="function"){return generateEvaluatorFromFunction(dataStack,expression);} -let evaluator=generateEvaluatorFromString(dataStack,expression,el);return tryCatch.bind(null,el,expression,evaluator);} -function generateEvaluatorFromFunction(dataStack,func){return(receiver=()=>{},{scope={},params=[]}={})=>{let result=func.apply(mergeProxies([scope,...dataStack]),params);runIfTypeOfFunction(receiver,result);};} -var evaluatorMemo={};function generateFunctionFromString(expression,el){if(evaluatorMemo[expression]){return evaluatorMemo[expression];} -let AsyncFunction=Object.getPrototypeOf(async function(){}).constructor;let rightSideSafeExpression=/^[\n\s]*if.*\(.*\)/.test(expression)||/^(let|const)\s/.test(expression)?`(() => { ${expression} })()`:expression;const safeAsyncFunction=()=>{try{return new AsyncFunction(["__self","scope"],`with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`);}catch(error2){handleError(error2,el,expression);return Promise.resolve();}};let func=safeAsyncFunction();evaluatorMemo[expression]=func;return func;} -function generateEvaluatorFromString(dataStack,expression,el){let func=generateFunctionFromString(expression,el);return(receiver=()=>{},{scope={},params=[]}={})=>{func.result=void 0;func.finished=false;let completeScope=mergeProxies([scope,...dataStack]);if(typeof func==="function"){let promise=func(func,completeScope).catch((error2)=>handleError(error2,el,expression));if(func.finished){runIfTypeOfFunction(receiver,func.result,completeScope,params,el);}else{promise.then((result)=>{runIfTypeOfFunction(receiver,result,completeScope,params,el);}).catch((error2)=>handleError(error2,el,expression));}}};} -function runIfTypeOfFunction(receiver,value,scope,params,el){if(typeof value==="function"){let result=value.apply(scope,params);if(result instanceof Promise){result.then((i)=>runIfTypeOfFunction(receiver,i,scope,params)).catch((error2)=>handleError(error2,el,value));}else{receiver(result);}}else{receiver(value);}} -var prefixAsString="x-";function prefix(subject=""){return prefixAsString+subject;} -function setPrefix(newPrefix){prefixAsString=newPrefix;} -var directiveHandlers={};function directive(name,callback){directiveHandlers[name]=callback;} -function directives(el,attributes,originalAttributeOverride){let transformedAttributeMap={};let directives2=Array.from(attributes).map(toTransformedAttributes((newName,oldName)=>transformedAttributeMap[newName]=oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap,originalAttributeOverride)).sort(byPriority);return directives2.map((directive2)=>{return getDirectiveHandler(el,directive2);});} -function attributesOnly(attributes){return Array.from(attributes).map(toTransformedAttributes()).filter((attr)=>!outNonAlpineAttributes(attr));} -var isDeferringHandlers=false;var directiveHandlerStacks=new Map();var currentHandlerStackKey=Symbol();function deferHandlingDirectives(callback){isDeferringHandlers=true;let key=Symbol();currentHandlerStackKey=key;directiveHandlerStacks.set(key,[]);let flushHandlers=()=>{while(directiveHandlerStacks.get(key).length) -directiveHandlerStacks.get(key).shift()();directiveHandlerStacks.delete(key);};let stopDeferring=()=>{isDeferringHandlers=false;flushHandlers();};callback(flushHandlers);stopDeferring();} -function getDirectiveHandler(el,directive2){let noop=()=>{};let handler3=directiveHandlers[directive2.type]||noop;let cleanups=[];let cleanup2=(callback)=>cleanups.push(callback);let[effect3,cleanupEffect]=elementBoundEffect(el);cleanups.push(cleanupEffect);let utilities={Alpine:alpine_default,effect:effect3,cleanup:cleanup2,evaluateLater:evaluateLater.bind(evaluateLater,el),evaluate:evaluate.bind(evaluate,el)};let doCleanup=()=>cleanups.forEach((i)=>i());onAttributeRemoved(el,directive2.original,doCleanup);let fullHandler=()=>{if(el._x_ignore||el._x_ignoreSelf) -return;handler3.inline&&handler3.inline(el,directive2,utilities);handler3=handler3.bind(handler3,el,directive2,utilities);isDeferringHandlers?directiveHandlerStacks.get(currentHandlerStackKey).push(handler3):handler3();};fullHandler.runCleanups=doCleanup;return fullHandler;} -var startingWith=(subject,replacement)=>({name,value})=>{if(name.startsWith(subject)) -name=name.replace(subject,replacement);return{name,value};};var into=(i)=>i;function toTransformedAttributes(callback=()=>{}){return({name,value})=>{let{name:newName,value:newValue}=attributeTransformers.reduce((carry,transform)=>{return transform(carry);},{name,value});if(newName!==name) -callback(newName,name);return{name:newName,value:newValue};};} -var attributeTransformers=[];function mapAttributes(callback){attributeTransformers.push(callback);} -function outNonAlpineAttributes({name}){return alpineAttributeRegex().test(name);} -var alpineAttributeRegex=()=>new RegExp(`^${prefixAsString}([^:^.]+)\\b`);function toParsedDirectives(transformedAttributeMap,originalAttributeOverride){return({name,value})=>{let typeMatch=name.match(alpineAttributeRegex());let valueMatch=name.match(/:([a-zA-Z0-9\-:]+)/);let modifiers=name.match(/\.[^.\]]+(?=[^\]]*$)/g)||[];let original=originalAttributeOverride||transformedAttributeMap[name]||name;return{type:typeMatch?typeMatch[1]:null,value:valueMatch?valueMatch[1]:null,modifiers:modifiers.map((i)=>i.replace(".","")),expression:value,original};};} -var DEFAULT="DEFAULT";var directiveOrder=["ignore","ref","data","bind","init","for","model","transition","show","if",DEFAULT,"element"];function byPriority(a,b){let typeA=directiveOrder.indexOf(a.type)===-1?DEFAULT:a.type;let typeB=directiveOrder.indexOf(b.type)===-1?DEFAULT:b.type;return directiveOrder.indexOf(typeA)-directiveOrder.indexOf(typeB);} -function dispatch(el,name,detail={}){el.dispatchEvent(new CustomEvent(name,{detail,bubbles:true,composed:true,cancelable:true}));} -var tickStack=[];var isHolding=false;function nextTick(callback){tickStack.push(callback);queueMicrotask(()=>{isHolding||setTimeout(()=>{releaseNextTicks();});});} -function releaseNextTicks(){isHolding=false;while(tickStack.length) -tickStack.shift()();} -function holdNextTicks(){isHolding=true;} -function walk(el,callback){if(typeof ShadowRoot==="function"&&el instanceof ShadowRoot){Array.from(el.children).forEach((el2)=>walk(el2,callback));return;} -let skip=false;callback(el,()=>skip=true);if(skip) -return;let node=el.firstElementChild;while(node){walk(node,callback,false);node=node.nextElementSibling;}} -function warn(message,...args){console.warn(`Alpine Warning: ${message}`,...args);} -function start(){if(!document.body) -warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` - diff --git a/app/views/console/databases/database.phtml b/app/views/console/databases/database.phtml deleted file mode 100644 index 1ceefc12e..000000000 --- a/app/views/console/databases/database.phtml +++ /dev/null @@ -1,323 +0,0 @@ -
-
-

- Database -
- -    -

-
- - - -
-
    -
  • -

    Collections

    - -
    - -
    -
    -

    No Collections Found

    - -

    You haven't created any collections for your project yet.

    -
    -
    - -
    - -
    - -
    -
    - - -
    - - - -
    - - -
    -
    - - - -
  • -
  • -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -

    Usage

    - -
    -

    Objects

    -

    Count of collections and documents over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Total Collections
    • -
    • Total Documents
    • -
    - - -

    Collections

    -

    Count of collections create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Created
    • -
    • Read
    • -
    • Updated
    • -
    • Deleted
    • -
    - -

    Documents

    -

    Count of documents create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Created
    • -
    • Read
    • -
    • Updated
    • -
    • Deleted
    • -
    -
    -
  • -
  • -

    Settings

    - -
    -
    -
    - - - -
    - - - -
    - - - -
    -
    -
    - -
    - -
    - -
      -
    • -
    • Last Updated:
    • -
    • Created:
    • -
    - -
    - - -
    -
    -
    -
  • -
-
-
- \ No newline at end of file diff --git a/app/views/console/databases/document.phtml b/app/views/console/databases/document.phtml deleted file mode 100644 index 84fa632ae..000000000 --- a/app/views/console/databases/document.phtml +++ /dev/null @@ -1,425 +0,0 @@ -getParam('new', false); -$logs = $this->getParam('logs', null); -$permissions = $this->getParam('permissions', null); - -?> -
- -
- -
-

- - -
- -    -    -

-
- - - -
-
    -
  • -

    Overview

    - -
    -
    -
    - -
    - data-analytics-label="Create Database Document" - data-success="trigger,redirect" - data-success-param-trigger-events="databases.createDocument" - data-success-param-redirect-url="/console/databases/collection?id={{project-collection.$id}}&databaseId={{router.params.databaseId}}&project={{router.params.project}}" - data-failure-param-alert-text="Failed to create document" - - data-analytics-label="Update Database Document" - data-success="trigger,alert" - data-success-param-trigger-events="databases.updateDocument" - data-success-param-alert-text="Your document was updated" - data-failure-param-alert-text="Failed to update document" - - > - - - - - -
    - - - - - -
    -
      - -
    -
    - -
    - - - -

    Permissions

    - - render() ?> -
    - - - -
    - -
    -
    -
    - -
    - -
    - -
    -
    - - -
    - -
    - - -
    - -
    - -
      -
    • - -
    • -
    • Last Updated:
    • -
    • Created:
    • -
    - -
    -
    - - -
    -
    -
    -
    -
  • - -
  • -

    Activity

    - - render(); ?> -
  • - -
-
-
-
diff --git a/app/views/console/databases/form.phtml b/app/views/console/databases/form.phtml deleted file mode 100644 index 963950e88..000000000 --- a/app/views/console/databases/form.phtml +++ /dev/null @@ -1,94 +0,0 @@ -getParam('collection', null); -$collections = $this->getParam('collections', []); -$rules = $collection->getAttribute('rules', []); -$key = $this->getParam('key', null); -$type = $this->getParam('type', null); -$parent = $this->getParam('parent', true); -$namespace = $this->getParam('namespace', 'project-document'); -$array = $this->getParam('array', false); - -?> - - - - - -escape($namespace); ?>.$id}})"> -   - Edit in a new window - -
- Create a new child document -
*/ ?> - - -
data-cast-to="object" class=" info"> - - - - - - -
    - setParam('key', $key) - ->setParam('array', $array) - ->setParam('required', $required) - ->setParam('list', $list) - ->setParam('namespace', $namespace.'.'.$key) - ->setParam('collections', $collections) - ; - - $loop - ->setParam('type', $type) - ->setParam('key', $key) - ->setParam('array', $array) - ->setParam('required', $required) - ->setParam('list', $list) - ->setParam('namespace', $namespace.'.'.$key) - ->setParam('comp', $comp) - ->setParam('collections', $collections) - ; - ?> -
  • - - -
    - - render(); ?> - - render(); ?> - -
    -
  • - -
-
\ No newline at end of file diff --git a/app/views/console/databases/index.phtml b/app/views/console/databases/index.phtml deleted file mode 100644 index 41c47fe1d..000000000 --- a/app/views/console/databases/index.phtml +++ /dev/null @@ -1,244 +0,0 @@ -
-

- Home -
- - Database -

-
- -
-
    -
  • -

    Databases

    - -
    - -
    -
    -

    No Databases Found

    - -

    You haven't created any databases for your project yet.

    -
    -
    - -
    - -
    - -
    -
    - - -
    - - - -
    - - -
    -
    - - - -
  • -
  • -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -

    Usage

    - -
    -

    Objects

    -

    Count of collections and documents over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Total Databases
    • -
    • Total Collections
    • -
    • Total Documents
    • -
    - -

    Databases

    -

    Count of databases create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Created
    • -
    • Read
    • -
    • Updated
    • -
    • Deleted
    • -
    - -

    Collections

    -

    Count of collections create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Created
    • -
    • Read
    • -
    • Updated
    • -
    • Deleted
    • -
    - -

    Documents

    -

    Count of documents create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Created
    • -
    • Read
    • -
    • Updated
    • -
    • Deleted
    • -
    -
    -
  • -
-
- diff --git a/app/views/console/functions/function.phtml b/app/views/console/functions/function.phtml deleted file mode 100644 index c98e092a0..000000000 --- a/app/views/console/functions/function.phtml +++ /dev/null @@ -1,921 +0,0 @@ -getParam('fileLimit', 0); -$fileLimitHuman = $this->getParam('fileLimitHuman', 0); -$events = $this->getParam('events', []); -$timeout = $this->getParam('timeout', 900); -$usageStatsEnabled = $this->getParam('usageStatsEnabled', true); -$patterns = [ - 'documents', - 'documents.create', - 'documents.update', - 'documents.delete', -]; - -foreach ($events as $name => $event) { - $patterns[] = $name; - foreach ($event as $key => $value) { - if (!\str_starts_with($key, '$')) { - if (!($value['$resource'] ?? false)) { - $patterns[] = "{$name}.{$key}"; - } else { - $patterns[] = $key; - foreach ($value as $key2 => $value2) { - if (!\str_starts_with($key2, '$')) { - if (!($value2['$resource'] ?? false)) { - $patterns[] = "{$key}.{$key2}"; - } - } - } - } - } - } -} - -sort($patterns); - -?> -
- -
-

- Functions -
- -   -

-
- - - -
-
    -
  • - -

    Overview

    - -
    -
    - - -
    -
    - Function Runtime - -

    -

    -
    -   View Logs -
    -
    -
    - -
    - -

    Deployments

    - -
    -

    No Deployments Found

    - -

    You haven't deployed any deployments for your function yet.

    -
    - -
    -
    -
      -
    • - - -
      - - -
      -
      - - - - -
      - -   - -
      - - - - - -   |   -   |   - -
      - - -   |   -
      -
      -
    • -
    -
    -
    -
    - -
    - -
    - -
    -
    - - -
    - - - -
    - - -
    -
    -
    -
    - -
    - -
    - -
      -
    • - -
    • -
    • Last Updated:
    • -
    • Created:
    • -
    - -
    - - -
    -
    -
    -
  • - -
  • - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -

    Monitors

    - -
    -
    -
    -
    - -
    -
    -
    - -
      -
    • Executions
    • -
    - -
    -
    -
    - -
    -
    -
    - -
      -
    • CPU Time
    • -
    - -
    -
    -
    - -
    -
    -
    - -
      -
    • Errors
    • -
    -
    -
  • - -
  • - -
    - -

    Logs

    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - -
    CreatedStatusTriggerRuntime
    - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - -
    -
    -
    - -
    -
    - - -
    - - - -
    - - -
    -
    -
    - -
    -
    -

    No Logs Founds

    - -

    Execute your function to view execution logs.

    -
    -
    -
    -
  • -
  • -

    Variables

    - - -
    -
      -
    • -
      - - -
      - - -
      - - -

      Update Variable

      - -
      - - - - - - - - - - -
      - -   -
      -
      - -
      - - -
      - -
      - -
      - - - -
      - - -
      -
    • -
    -
    - -
    -
    -

    There are currently no variables

    - -

    Add your first variable to store information securely.

    -
    -
    - - - - -
  • -
  • -

    Settings

    - -
    -
    - - -
    - -
    -
    - - - - - -
    Add 'any' for wildcard access
    - - - -
    Max value is escape(number_format($timeout)); ?> seconds (escape((int) ($timeout / 60)); ?> minutes)
    -
    - -
    - -
    - -
    - -
    - - - -
    Leave blank for no schedule
    - -
    - - -
    -
    -
    -
    - -
    - -
    - -
      -
    • - -
    • -
    • Last Updated:
    • -
    • Created:
    • -
    - -
    - - -
    -
    -
    - -
  • -
-
-
- - - diff --git a/app/views/console/functions/index.phtml b/app/views/console/functions/index.phtml deleted file mode 100644 index 014149179..000000000 --- a/app/views/console/functions/index.phtml +++ /dev/null @@ -1,216 +0,0 @@ -getParam('runtimes', []); -$usageStatsEnabled = $this->getParam('usageStatsEnabled', true); -?> -
-

- Home -
- - Functions -

-
- -
-
    -
  • -

    Functions

    - -
    - -
    -

    No Functions Found

    - -

    You haven't created any functions for your project yet.

    -
    - -
    -
    functions found
    - -
    - -
    -
    - -
    -
    - - -
    - - - -
    - - -
    -
    - -
    - -
    -
    -
  • - -
  • - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -

    Usage

    - -
    -
    -
    -
    - -
    -
    -
    - -
      -
    • Executions
    • -
    - -
    -
    -
    - -
    -
    -
    - -
      -
    • CPU Time
    • -
    - -
    -
    -
    - -
    -
    -
    - -
      -
    • Errors
    • -
    -
    -
  • - -
-
\ No newline at end of file diff --git a/app/views/console/home/index.phtml b/app/views/console/home/index.phtml deleted file mode 100644 index 2c476d163..000000000 --- a/app/views/console/home/index.phtml +++ /dev/null @@ -1,930 +0,0 @@ -getParam('graph', false); -$usageStatsEnabled = $this->getParam('usageStatsEnabled', true); -?> - -
-
-

-     -

- - - -
 
-
-
- -
-
- -
- -
- -
- - - -
- -
- - - -
- -
- - -
- -
-
- -
-
-
-
- -
- -
-
N/A
-
Requests
-
-
-
-
- 0 -
-
Connections
-
-
Activity last 60 seconds
-
-
-
- -
-
-
-
0
-
Documents
-
-
-
- 0 - -
-
Storage
-
-
-
0
-
Users
-
-
-
0
-
Executions
-
-
-
-
- -

Data is aggregated and updated every 15 minutes

-
- - - -
-

Platforms

- -
-
    -
  • -
    - - -
    - - -
    - - -

    Update Platform

    - -
    -
    - -
    - - -
    - -
    -
    - Platform Logo - -
    - iOS Logo -
    - -
    - Android Logo -
    - -
    - Linux Logo -
    - -
    - MacOS Logo -
    - -
    - Windows Logo -
    - -
    - iOS Logo -
    - -
    - macOS Logo -
    - -
    - watchOS Logo -
    - -
    - tvOS Logo -
    -
    - -
    - -

    - -
    - - -
    -
  • -
-
- -
-
-

No Platforms Added to Your Project

- -

Add your first platform and build your new application.

-
-
- - - -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/views/console/index.phtml b/app/views/console/index.phtml deleted file mode 100644 index 472a61095..000000000 --- a/app/views/console/index.phtml +++ /dev/null @@ -1,130 +0,0 @@ -getParam('home', ''); -?> - -
-
- -

Your Projects

- -

Take advantage of the Appwrite APIs and tools.

- - -
-
- -
-
- - - - - -
-
- - -
- - - -
- - -
-
- - -
- -
-
-
-

Join The Community

- -

Join Appwrite growing developers community channels.

- - - - - - -
-
-
-
-

Read The Docs

- -

Take full advantage of Appwrite APIs and tools for your new project.

- - Full Documentation -
-
-
-
diff --git a/app/views/console/keys/index.phtml b/app/views/console/keys/index.phtml deleted file mode 100644 index 6e8238245..000000000 --- a/app/views/console/keys/index.phtml +++ /dev/null @@ -1,184 +0,0 @@ -getParam('scopes', []); -?> -
-

- Home -
- - API Keys -

-
-
- -
-

No API Keys Found

- -

You haven't created any API keys for your project yet.

-
- -
-
    -
  • - - -
    - - - -
    - - - - -
    ( scopes granted)
    - -
    - - - - -
    -
  • -
-
- -
- -
-
diff --git a/app/views/console/settings/index.phtml b/app/views/console/settings/index.phtml deleted file mode 100644 index 76e790271..000000000 --- a/app/views/console/settings/index.phtml +++ /dev/null @@ -1,546 +0,0 @@ -getParam('services', []); -$customDomainsEnabled = $this->getParam('customDomainsEnabled', false); -$customDomainsTarget = $this->getParam('customDomainsTarget', false); -$smtpEnabled = $this->getParam('smtpEnabled', false); -?> -
-

- Home -
- - Settings -

-
- -
- -
-
    -
  • -

    Overview

    - -
    -
    - - -
    -
    - - - - - - - - -
    - -
    - -
    - - -
    -
    - -

    Danger Zone

    - -
    -

    This is the area where you can delete your project.

    - -

    By deleting your project you will lose all your project metadata, resources and stats.

    - -

    PLEASE NOTE: Project deletion is irreversible.

    - -
    - - - - -
    -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    -
    -
  • - -
  • -

    Services

    - -

    Choose services you wish to enable or disable.

    -
      - $service): - $key = $service['key'] ?? ''; - $name = $service['name'] ?? ''; - $icon = $service['icon'] ?? ''; - $docs = $service['docsUrl'] ?? ''; - ?> -
    • -
      -
      -
      - - - -
      - - - - escape($name); ?> - - -

      - Docs -

      - -
      -
      -
    • - -
    -
  • -
  • - - -

    Custom Domains

    - -
    -

    Enable Custom Domains

    - -

    To enable 's custom domain feature, you have to start your server instance with a public accessible domain name.

    - -

    Start your server container with the _APP_DOMAIN_TARGET environment variable set with a public accessible domain name that resolves to your server setup.

    -

    The server will use your target domain to validate new custom domains and will automatically generate SSL certificates for your new domains using Let'sencrypt Certbot.

    -
    - - - -

    Custom Domains

    - -
    - -
    -

    No Custom Domains Added

    - -

    You haven't created any custom domains for your project yet.

    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    Domain NameTLS
    - Unverified  - Verified  - - - -  Pending Verification  -  In Progress  - Enabled  - - - - - - -
    - - - - - -
    -
    -
    - -
    - -
    -
    - -
  • -
  • -

    Members

    - -
    - -
    -
      -
    • -
      - - - - - - -
      - -
      - - - - - - -
      - -
      -
      - - - - - -
      - -
      - - - - - - -
      -
      - - User Avatar - -
      -      Pending Approval -
      - -
    • -
    -
    - - -
    -
  • -
-
-
diff --git a/app/views/console/storage/bucket.phtml b/app/views/console/storage/bucket.phtml deleted file mode 100644 index 8a4c7b0b9..000000000 --- a/app/views/console/storage/bucket.phtml +++ /dev/null @@ -1,514 +0,0 @@ -getParam('home', ''); -$fileLimit = $this->getParam('fileLimit', 0); -$fileLimitHuman = $this->getParam('fileLimitHuman', 0); -$bucketPermissions = $this->getParam('bucketPermissions', null); -$fileCreatePermissions = $this->getParam('fileCreatePermissions', null); -$fileUpdatePermissions = $this->getParam('fileUpdatePermissions', null); -?> - -
- -
-

- Storage - -
- -    -

-
- - - -
- -
-
-
- -
    -
  • -

    Files

    - - - -
    - -
    -

    No Files Found

    - -

    Upload your first file to get started

    -
    - -
    -
    files found
    - -
    - - - - - - - - - - - - - - - - - - - - - -
    FilenameTypeSizeCreated
    - - -
    - - - pending -
    -
    - - - - - - - -
    -
      -
    • Update
    • -
    • Delete
    • -
    -
    -
    -
    -
    -
    -
    - - -
    - - - -
    - - -
    -
    - - -
    -
  • -
  • -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -

    Usage

    - -
    -

    Files

    -

    Count of files over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Files
    • -
    - -

    Operations

    -

    Count of files create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Create
    • -
    • Read
    • -
    • Update
    • -
    • Delete
    • -
    -
    -
  • -
  • -

    Settings

    - -
    -
    - -
    - - - -
    - - - - - - - - - -
    -   Enabled -
    - -
    -   Encryption -
    - -
    -   Anti Virus -
    - - - -
    Leave empty to allow all.
    - - - - -

    Configure the permissions for this bucket.

    - -
    - - render(); ?> - -
    - - - -
    -
    -
    - Enabled -

    With File Security enabled, users will be able to access files for which they have been granted either File or Bucket permissions.

    -
    -
    - -
    - - - -
    -
    -
    - -
    - -
    - -
      -
    • - -
    • -
    • Last Updated:
    • -
    • Created:
    • -
    - -
    - - -
    -
    -
    -
  • -
-
-
- diff --git a/app/views/console/storage/index.phtml b/app/views/console/storage/index.phtml deleted file mode 100644 index 7bc355eb6..000000000 --- a/app/views/console/storage/index.phtml +++ /dev/null @@ -1,209 +0,0 @@ -
-

- Home -
- - Storage -

-
- -
-
    -
  • -

    Buckets

    - -
    - -
    -
    -

    No Buckets Found

    - -

    You haven't created any buckets for your project yet.

    -
    -
    - -
    - -
    - -
    -
    - - -
    - - - -
    - - -
    -
    - - - -
  • - -
  • -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -

    Usage

    - -
    -

    Objects

    -

    Count of buckets, files and total storage used over time

    -
    -
    -
    - -
    -
    -
    -
      -
    • Total Files
    • -
    • Total Buckets
    • - -
    - - -

    Buckets

    -

    Count of bucket create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Create
    • -
    • Read
    • -
    • Update
    • -
    • Delete
    • -
    - -

    Files

    -

    Count of file create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Create
    • -
    • Read
    • -
    • Update
    • -
    • Delete
    • -
    -
    -
  • -
-
- diff --git a/app/views/console/users/index.phtml b/app/views/console/users/index.phtml deleted file mode 100644 index 20ac5f267..000000000 --- a/app/views/console/users/index.phtml +++ /dev/null @@ -1,604 +0,0 @@ -getParam('providers', []); -$auth = $this->getParam('auth', []); -$smtpEnabled = $this->getParam('smtpEnabled', false); -?> - -
-

- Home -
- - Authentication -

-
- -
-
    -
  • - -

    Users

    - - - -
    - -
    -

    No Users Found

    - -

    Create your first user to get started

    -
    - -
    -
    users found
    - -
    - - - - - - - - - - - - - - - - - - - -
    NameEmailStatusJoined
    - User Avatar - - - - Unknown - Anonymous User - - - - - - Verified - - - - Unverified - - - - Blocked - -
    -
    -
    - -
    -
    - - -
    - - - -
    - - -
    -
    - - -
    -
  • - -
  • -

    Teams

    - - - -
    - -
    -

    No Teams Found

    - -

    Create your first team to get started

    -
    - -
    -
    teams found
    - -
    - - - - - - - - - - - - - - - - - -
    NameMembersCreated
    - Collection Avatar - - -
    -
    -
    - -
    -
    - - -
    - - - -
    - - -
    -
    - - -
    -
  • - -
  • -

    Unlimited Users Set Limit

    -

    Users allowed Change Limit

    - -

    Settings

    - - - -

    Choose auth methods you wish to use.

    - -
      - $method): - $key = ucfirst($method['key'] ?? ''); - $name = $method['name'] ?? ''; - $icon = $method['icon'] ?? ''; - $docs = $method['docs'] ?? ''; - $enabled = $method['enabled'] ?? false; - ?> -
    • -
      - -
      - - - - -
      - - - Email/Password Logo - - escape($name); ?> soon - - -

      - SMTP Disabled -

      - - -

      - Docs -

      - - -
      -
    • - -
    - -

    OAuth2 Providers

    - -
    -
      - $data): - if (isset($data['enabled']) && !$data['enabled']) {continue;} - if (isset($data['mock']) && $data['mock']) {continue;} - $sandbox = $data['sandbox'] ?? false; - $form = $data['form'] ?? false; - $name = $data['name'] ?? 'Unknown'; - $beta = $data['beta'] ?? false; - ?> -
    • - - -
      - - - - - - - - - <?php echo $this->escape(ucfirst($provider)); ?> Logo - - - escape($name); ?> sandbox beta - - -

      - OAuth2 Docs -

      -
      -
    • - -
    -
    -
  • -
  • -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -

    Usage

    - -
    -

    Users

    -

    Count of users over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Users
    • -
    - -

    Operations

    -

    Count of users create, read, update and delete operations over time

    -
    -
    -
    - -
    -
    -
    - -
      -
    • Created
    • -
    • Read
    • -
    • Updated
    • -
    • Deleted
    • -
    -
    -
  • -
-
diff --git a/app/views/console/users/oauth/apple.phtml b/app/views/console/users/oauth/apple.phtml deleted file mode 100644 index 7fb56b88e..000000000 --- a/app/views/console/users/oauth/apple.phtml +++ /dev/null @@ -1,13 +0,0 @@ -getParam('provider', ''); -?> - - - - -
-
-
-
-
-
\ No newline at end of file diff --git a/app/views/console/users/oauth/auth0.phtml b/app/views/console/users/oauth/auth0.phtml deleted file mode 100644 index 8509a582b..000000000 --- a/app/views/console/users/oauth/auth0.phtml +++ /dev/null @@ -1,12 +0,0 @@ -getParam('provider', ''); -?> - - - - - - - - - \ No newline at end of file diff --git a/app/views/console/users/oauth/authentik.phtml b/app/views/console/users/oauth/authentik.phtml deleted file mode 100644 index ba1119879..000000000 --- a/app/views/console/users/oauth/authentik.phtml +++ /dev/null @@ -1,12 +0,0 @@ -getParam('provider', ''); -?> - - - - - - - - - \ No newline at end of file diff --git a/app/views/console/users/oauth/gitlab.phtml b/app/views/console/users/oauth/gitlab.phtml deleted file mode 100644 index ad6b11e13..000000000 --- a/app/views/console/users/oauth/gitlab.phtml +++ /dev/null @@ -1,12 +0,0 @@ -getParam('provider', ''); -?> - - - - - - - - - diff --git a/app/views/console/users/oauth/microsoft.phtml b/app/views/console/users/oauth/microsoft.phtml deleted file mode 100644 index e366f80ca..000000000 --- a/app/views/console/users/oauth/microsoft.phtml +++ /dev/null @@ -1,12 +0,0 @@ -getParam('provider', ''); -?> - - - - - - - - - \ No newline at end of file diff --git a/app/views/console/users/oauth/okta.phtml b/app/views/console/users/oauth/okta.phtml deleted file mode 100644 index 2459e1543..000000000 --- a/app/views/console/users/oauth/okta.phtml +++ /dev/null @@ -1,14 +0,0 @@ -getParam('provider', ''); -?> - - - - - - - - - - - \ No newline at end of file diff --git a/app/views/console/users/team.phtml b/app/views/console/users/team.phtml deleted file mode 100644 index 66370592f..000000000 --- a/app/views/console/users/team.phtml +++ /dev/null @@ -1,292 +0,0 @@ -
- -
-

- Teams -
- -   - Unknown -

-
- - - -
-
    -
  • -

    Overview

    - -
    -
    - - -
    -
    - - - - - - -
    - - -
    -
    - -

    Members

    - -
    - -
    -

    No Memberships Found

    - -

    Add your first team member to get started

    -
    - -
    -
    memberships found
    - -
    -
      -
    • -
      - - - - - -
      - - User Avatar - -
      -    - - -
      -   Pending Approval -
    • -
    -
    -
    - - - -
    -
    - - -
    - - - -
    - - -
    -
    -
    -
    -
    - -
    - -
    - -
      -
    • - -
    • -
    • Created:
    • -
    - -
    - - -
    -
    -
    -
  • -
  • -

    Activity

    - -
    - - - - -
    -
  • -
-
-
\ No newline at end of file diff --git a/app/views/console/users/user.phtml b/app/views/console/users/user.phtml deleted file mode 100644 index 92c14fbd3..000000000 --- a/app/views/console/users/user.phtml +++ /dev/null @@ -1,618 +0,0 @@ -
- -
-

- Users -
- -   - Unknown - Anonymous User -

-
- - - - - - - - - - - -
-
    -
  • -

    Overview

    - - - -
    -
    - - -
    -
    - User Avatar - -
    -
    -
    - - - Verified - - - Unverified - -
    -
    -
    - - - Verified - - - Unverified - -
    -
    -
    - -

    Preferences

    - -
    - -
    - - - - - - - - - - - - - -
    KeyValue
    - - - -
    -
    - -
    - No user preferences found -
    -
    - -

    Danger Zone

    - -
    -

    This is the area where you can delete this user.

    - -

    By deleting this user you will lose all data associated with this user.

    - -

    PLEASE NOTE: User deletion is irreversible.

    - -
    - - - -
    -
    -
    -
    - -
    - -
    - -
      -
    • -
    • -
    • -
    • -
    • - -
    • -
    - -
    -
    - - - -
    -
    - -
    -
    - - - -
    -
    - -
    -
    - - - -
    -
    - -
    -
    - - - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    -
    -
    -
  • -
  • -

    Memberships

    - -
    - - - -
    -
    memberships found
    - -
    -
      -
    • -
      - - - - - -
      -
      - -
      - -
      - - - Pending Approval -
      -
    • -
    -
    -
    -
    -
  • -
  • -

    Sessions

    - -
    - - - -
    -
    -
      -
    • -
      - - - - -
      -
      - - - - -
      - -
      -
      - - on - -
      - - / -
      -
    • -
    -
    - -
    - - -
    -
    -
    - -
  • -
  • -

    Activity

    - -
    - - - - -
    -
  • -
-
-
diff --git a/app/views/console/webhooks/index.phtml b/app/views/console/webhooks/index.phtml deleted file mode 100644 index a3c65297c..000000000 --- a/app/views/console/webhooks/index.phtml +++ /dev/null @@ -1,66 +0,0 @@ -getParam('events', []); -$patterns = []; - -foreach ($events as $name => $event) { - foreach ($event as $key => $value) { - if (!\str_starts_with($key, '$')) { - if (!($value['$resource'] ?? false)) { - $patterns[] = "{$name}.{$key}"; - } else { - foreach ($value as $key2 => $value2) { - if (!\str_starts_with($key2, '$')) { - if (!($value2['$resource'] ?? false)) { - $patterns[] = "{$key}.{$key2}"; - } - } - } - } - } - } -} - -?> - -
-

- Home -
- - Webhooks -

-
- -
- -
-

No Webhooks Found

- -

You haven't created any webhooks for your project yet.

-
- -
-
    -
  • - Manage - -   ( events) - -   (SSL/TLS Disabled) - -
    - -
    -
  • -
-
- Add Webhook -
diff --git a/app/views/console/webhooks/webhook.phtml b/app/views/console/webhooks/webhook.phtml deleted file mode 100644 index 7725857dd..000000000 --- a/app/views/console/webhooks/webhook.phtml +++ /dev/null @@ -1,261 +0,0 @@ -getParam('new', false); -$events = $this->getParam('events', []); -$patterns = [ - 'documents', - 'documents.create', - 'documents.update', - 'documents.delete', -]; - -foreach ($events as $name => $event) { - $patterns[] = $name; - foreach ($event as $key => $value) { - if (!\str_starts_with($key, '$')) { - if (!($value['$resource'] ?? false)) { - $patterns[] = "{$name}.{$key}"; - } else { - $patterns[] = $key; - foreach ($value as $key2 => $value2) { - if (!\str_starts_with($key2, '$')) { - if (!($value2['$resource'] ?? false)) { - $patterns[] = "{$key}.{$key2}"; - } - } - } - } - } - } -} - -sort($patterns); - -?> -
- -
-

- Webhooks -
- - - Add Webhook - -   - -

-
- -
-

Settings

-
-
- - -
-
- data-success="alert,trigger,redirect" - data-analytics-label="Create Project Webhook" - data-service="projects.createWebhook" - data-success-param-alert-text="Created webhook successfully" - data-success-param-trigger-events="projects.createWebhook" - data-failure-param-alert-text="Failed to create webhook" - data-success-param-redirect-url="/console/webhooks?project={{router.params.project}}" - - data-success="alert,trigger" - data-analytics-label="Update Project Webhook" - data-service="projects.updateWebhook" - data-success-param-alert-text="Updated webhook successfully" - data-success-param-trigger-events="projects.updateWebhook" - data-failure-param-alert-text="Failed to update webhook" - - data-scope="console" - data-event="submit" - data-failure="alert" - data-failure-param-alert-classname="error"> - - - - - - - - - - -
- -
- -
- -
- -
- - - -

- Advanced Options - (optional) -

- - - -

Warning: Untrusted or self-signed certificates may not be secure. - Learn more -

- - - -
-
- - -
-
- - -
-
-
- -
- -
-
-
-
- -
- -
- -
- - -
- -
- -
- - - - - -
- -
- - - - - -
-
- - -
-
-
\ No newline at end of file diff --git a/app/views/home/auth/confirm.phtml b/app/views/home/auth/confirm.phtml deleted file mode 100644 index ae7ff4c8f..000000000 --- a/app/views/home/auth/confirm.phtml +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/app/views/home/auth/join.phtml b/app/views/home/auth/join.phtml deleted file mode 100644 index af11975aa..000000000 --- a/app/views/home/auth/join.phtml +++ /dev/null @@ -1,59 +0,0 @@ -
-
- -
Failed to join team. Please try again later
- -

Invitation

- -

You have been invited to join a team project on

- - - -
-
- -
- - By accepting the invitation, you agree to the Terms and Conditions and Privacy Policy. -
- -
- - Cancel -
-
-
\ No newline at end of file diff --git a/app/views/home/auth/magicURL.phtml b/app/views/home/auth/magicURL.phtml deleted file mode 100644 index d3cae6885..000000000 --- a/app/views/home/auth/magicURL.phtml +++ /dev/null @@ -1,38 +0,0 @@ - - - -
\ No newline at end of file diff --git a/app/views/home/auth/oauth2.phtml b/app/views/home/auth/oauth2.phtml deleted file mode 100644 index 82de8d1ec..000000000 --- a/app/views/home/auth/oauth2.phtml +++ /dev/null @@ -1,18 +0,0 @@ - - - -
\ No newline at end of file diff --git a/app/views/home/auth/recovery.phtml b/app/views/home/auth/recovery.phtml deleted file mode 100644 index 39ac4237f..000000000 --- a/app/views/home/auth/recovery.phtml +++ /dev/null @@ -1,43 +0,0 @@ -getParam('smtpEnabled', false); -?> -
-

- Password Recovery -

- - * All fields are required - -
- - - - - - - -
- SMTP connection is disabled. Learn more -
- - - -
-
- - diff --git a/app/views/home/auth/recovery/reset.phtml b/app/views/home/auth/recovery/reset.phtml deleted file mode 100644 index 6e2523b14..000000000 --- a/app/views/home/auth/recovery/reset.phtml +++ /dev/null @@ -1,38 +0,0 @@ -
-

- Password Reset -

- - * All fields are required - -
-
- -
- - - - - - - - - - - -
-
diff --git a/app/views/home/auth/signin.phtml b/app/views/home/auth/signin.phtml deleted file mode 100644 index 22ca8ef3c..000000000 --- a/app/views/home/auth/signin.phtml +++ /dev/null @@ -1,53 +0,0 @@ -getParam('root') !== 'disabled'); -?> -
- -
-

- Sign In -

- -
Login failed. Please check your credentials.
- -

Login using email and password

- -
- - - - - - -
- -
-
- -
- Forgot password? or don't have an account? Sign up now -
-
- -
\ No newline at end of file diff --git a/app/views/home/auth/signup.phtml b/app/views/home/auth/signup.phtml deleted file mode 100644 index 817e1d75f..000000000 --- a/app/views/home/auth/signup.phtml +++ /dev/null @@ -1,74 +0,0 @@ -getParam('root') !== 'disabled'); -?> - - - - - diff --git a/app/views/home/comps/footer.phtml b/app/views/home/comps/footer.phtml deleted file mode 100644 index 456f2dbb5..000000000 --- a/app/views/home/comps/footer.phtml +++ /dev/null @@ -1,4 +0,0 @@ -getParam('version', '').'.'.APP_CACHE_BUSTER; -?> -
version
\ No newline at end of file diff --git a/app/views/home/comps/header.phtml b/app/views/home/comps/header.phtml deleted file mode 100644 index eb154c468..000000000 --- a/app/views/home/comps/header.phtml +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/app/views/layouts/default.phtml b/app/views/layouts/default.phtml deleted file mode 100644 index a82080059..000000000 --- a/app/views/layouts/default.phtml +++ /dev/null @@ -1,153 +0,0 @@ -getParam('protocol', ''); -$domain = $this->getParam('domain', ''); -$endpoint = $this->getParam('endpoint', ''); -$platforms = $this->getParam('platforms', []); -$version = $this->getParam('version', '0.0.0'); -$isDev = $this->getParam('isDev', false); -$litespeed = $this->getParam('litespeed', true); -$analytics = $this->getParam('analytics', 'UA-26264668-9'); -$mode = $this->getParam('mode', ''); -$canonical = $this->getParam('canonical', ''); -$image = $this->getParam('image', '/images/logo.png'); -$locale = $this->getParam('locale', null); -$runtimes = $this->getParam('runtimes', null); - -if(!empty($platforms)) { - $platforms = array_map(function($platform) { - return [ - 'key' => $platform['key'], - 'name' => $platform['name'], - 'languages' => array_map(function($language) { - return [ - 'key' => $language['key'], - 'name' => $language['name'] . (($language['beta']) ? ' (beta)' : ''), - ]; - }, array_filter($platform['languages'], function($node) { - return ($node['enabled']); - })) - ]; - }, $platforms); -} - -?> - - - <?php echo $this->getParam('title', ''); ?> - - - - - - - - - getParam('prefetch', []) as $prefetch): ?> - - - - - - - - - - - - - - - - - - - exec($this->getParam('head', [])); ?> - - - - - exec($this->getParam('header', [])); ?> - -
- exec($this->getParam('body', [])); ?> -
- -
- -
- -
-
    -
  • -
    - - - - - - - -
    -
  • -
-
- - exec($this->getParam('footer', [])); ?> - - - - diff --git a/app/views/layouts/empty.phtml b/app/views/layouts/empty.phtml deleted file mode 100644 index 136146644..000000000 --- a/app/views/layouts/empty.phtml +++ /dev/null @@ -1,3 +0,0 @@ -
- exec($this->getParam('body', [])); ?> -
\ No newline at end of file From 825738ced9ca437ba965200446a2a5446a13a0dd Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 14 Nov 2022 22:42:48 +0100 Subject: [PATCH 36/62] chore: prepare 1.1.x --- app/init.php | 2 +- app/tasks/sdks.php | 2 +- src/Appwrite/Migration/Migration.php | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/init.php b/app/init.php index 96683c9c0..3a41a53ab 100644 --- a/app/init.php +++ b/app/init.php @@ -95,7 +95,7 @@ const APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT = 60; // Default maximum write rate pe const APP_KEY_ACCCESS = 24 * 60 * 60; // 24 hours const APP_CACHE_UPDATE = 24 * 60 * 60; // 24 hours const APP_CACHE_BUSTER = 501; -const APP_VERSION_STABLE = '1.0.3'; +const APP_VERSION_STABLE = '1.1.0'; const APP_DATABASE_ATTRIBUTE_EMAIL = 'email'; const APP_DATABASE_ATTRIBUTE_ENUM = 'enum'; const APP_DATABASE_ATTRIBUTE_IP = 'ip'; diff --git a/app/tasks/sdks.php b/app/tasks/sdks.php index 4ba6f9d02..3fe05c056 100644 --- a/app/tasks/sdks.php +++ b/app/tasks/sdks.php @@ -30,7 +30,7 @@ $cli $production = ($git) ? (Console::confirm('Type "Appwrite" to push code to production git repos') == 'Appwrite') : false; $message = ($git) ? Console::confirm('Please enter your commit message:') : ''; - if (!in_array($version, ['0.6.x', '0.7.x', '0.8.x', '0.9.x', '0.10.x', '0.11.x', '0.12.x', '0.13.x', '0.14.x', '0.15.x', '1.0.x', 'latest'])) { + if (!in_array($version, ['0.6.x', '0.7.x', '0.8.x', '0.9.x', '0.10.x', '0.11.x', '0.12.x', '0.13.x', '0.14.x', '0.15.x', '1.0.x', '1.1.x', 'latest'])) { throw new Exception('Unknown version given'); } diff --git a/src/Appwrite/Migration/Migration.php b/src/Appwrite/Migration/Migration.php index c87c907bf..d3833b6e7 100644 --- a/src/Appwrite/Migration/Migration.php +++ b/src/Appwrite/Migration/Migration.php @@ -44,7 +44,8 @@ abstract class Migration '1.0.0-RC1' => 'V15', '1.0.0' => 'V15', '1.0.1' => 'V15', - '1.0.3' => 'V15' + '1.0.3' => 'V15', + '1.1.0' => 'V15', ]; /** From c621b66195a0ea66e870d2825dd284e19f2d69b7 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 14 Nov 2022 22:54:38 +0100 Subject: [PATCH 37/62] fix: upgrade console --- app/console | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/console b/app/console index 133c9dd98..602943f7a 160000 --- a/app/console +++ b/app/console @@ -1 +1 @@ -Subproject commit 133c9dd98f37f6c9f705abee1cac7164089d2793 +Subproject commit 602943f7a6487789f32ea3643e0c299a5b393d25 From 8dd5eb09f096bb907dd2f980d4aee36cace6a2f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 15 Nov 2022 09:33:07 +0000 Subject: [PATCH 38/62] Fix executions usage count --- app/workers/functions.php | 1 + src/Appwrite/Usage/Calculators/TimeSeries.php | 2 +- tests/e2e/General/UsageTest.php | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/workers/functions.php b/app/workers/functions.php index 1df776383..efd6ebb41 100644 --- a/app/workers/functions.php +++ b/app/workers/functions.php @@ -368,6 +368,7 @@ class FunctionsV1 extends Worker $usage = new Stats($statsd); $usage ->setParam('projectId', $project->getId()) + ->setParam('projectInternalId', $project->getInternalId()) ->setParam('functionId', $function->getId()) ->setParam('executions.{scope}.compute', 1) ->setParam('executionStatus', $execution->getAttribute('status', '')) diff --git a/src/Appwrite/Usage/Calculators/TimeSeries.php b/src/Appwrite/Usage/Calculators/TimeSeries.php index 7b9497e66..2ef3d77ca 100644 --- a/src/Appwrite/Usage/Calculators/TimeSeries.php +++ b/src/Appwrite/Usage/Calculators/TimeSeries.php @@ -492,7 +492,7 @@ class TimeSeries extends Calculator $value = (!empty($point['value'])) ? $point['value'] : 0; if (empty($point['projectInternalId'] ?? null)) { - return; + continue; } $this->createOrUpdateMetric( $point['projectInternalId'], diff --git a/tests/e2e/General/UsageTest.php b/tests/e2e/General/UsageTest.php index 572bc4abf..3e02ff1a2 100644 --- a/tests/e2e/General/UsageTest.php +++ b/tests/e2e/General/UsageTest.php @@ -684,6 +684,25 @@ class UsageTest extends Scope } $executionTime += (int) ($execution['body']['duration'] * 1000); + $execution = $this->client->call(Client::METHOD_POST, '/functions/' . $functionId . '/executions', $headers, [ + 'async' => true, + ]); + + $this->assertEquals(201, $execution['headers']['status-code']); + $this->assertNotEmpty($execution['body']['$id']); + $this->assertEquals($functionId, $execution['body']['functionId']); + + sleep(10); + + $execution = $this->client->call(Client::METHOD_GET, '/functions/' . $functionId . '/executions/' . $execution['body']['$id'], $headers); + + if ($execution['body']['status'] == 'failed') { + $failures++; + } elseif ($execution['body']['status'] == 'completed') { + $executions++; + } + $executionTime += (int) ($execution['body']['duration'] * 1000); + $data = array_merge($data, [ 'functionId' => $functionId, 'executionTime' => $executionTime, From e1ecf9aad795012a9cf059fa6014c58a9917e78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 15 Nov 2022 09:41:55 +0000 Subject: [PATCH 39/62] Fix failing test --- tests/e2e/General/UsageTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/General/UsageTest.php b/tests/e2e/General/UsageTest.php index 3e02ff1a2..c61603dc5 100644 --- a/tests/e2e/General/UsageTest.php +++ b/tests/e2e/General/UsageTest.php @@ -688,7 +688,7 @@ class UsageTest extends Scope 'async' => true, ]); - $this->assertEquals(201, $execution['headers']['status-code']); + $this->assertEquals(202, $execution['headers']['status-code']); $this->assertNotEmpty($execution['body']['$id']); $this->assertEquals($functionId, $execution['body']['functionId']); From 64b725a6f7f631a8897a4b6a1c9f6abda42bc65d Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 15 Nov 2022 10:19:35 +0000 Subject: [PATCH 40/62] Update Defaults --- app/controllers/api/projects.php | 2 +- src/Appwrite/Utopia/Response/Model/Project.php | 9 +++++---- .../e2e/Services/Projects/ProjectsConsoleClientTest.php | 9 +++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 65cfef04a..80cf55fad 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -81,7 +81,7 @@ App::post('/v1/projects') } $auth = Config::getParam('auth', []); - $auths = ['limit' => 0]; + $auths = ['limit' => 0, 'duration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG]; foreach ($auth as $index => $method) { $auths[$method['key'] ?? ''] = true; } diff --git a/src/Appwrite/Utopia/Response/Model/Project.php b/src/Appwrite/Utopia/Response/Model/Project.php index a8b556193..42f360d6a 100644 --- a/src/Appwrite/Utopia/Response/Model/Project.php +++ b/src/Appwrite/Utopia/Response/Model/Project.php @@ -2,6 +2,7 @@ namespace Appwrite\Utopia\Response\Model; +use Appwrite\Auth\Auth; use Appwrite\Utopia\Response; use Appwrite\Utopia\Response\Model; use Utopia\Config\Config; @@ -102,10 +103,10 @@ class Project extends Model 'example' => '131102020', ]) ->addRule('authDuration', [ - 'type' => self::TYPE_STRING, + 'type' => self::TYPE_INTEGER, 'description' => 'Session duration in seconds.', - 'default' => '', - 'example' => '30', + 'default' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, + 'example' => 60, ]) ->addRule('authLimit', [ 'type' => self::TYPE_INTEGER, @@ -231,7 +232,7 @@ class Project extends Model $auth = Config::getParam('auth', []); $document->setAttribute('authLimit', $authValues['limit'] ?? 0); - $document->setAttribute('authDuration', $authValues['duration'] ?? 0); + $document->setAttribute('authDuration', $authValues['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG); foreach ($auth as $index => $method) { $key = $method['key']; diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index a9bfaa965..3fd06f07e 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -417,6 +417,15 @@ class ProjectsConsoleClientTest extends Scope { $id = $data['projectId']; + // Check defaults + $response = $this->client->call(Client::METHOD_GET, '/projects/' . $id, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => 'console', + ], $this->getHeaders())); + + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals(Auth::TOKEN_EXPIRATION_LOGIN_LONG, $response['body']['authDuration']); // 1 Year + /** * Test for SUCCESS */ From a51288da5761c1a909a749f0236d4e7bb2df7868 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 15 Nov 2022 10:25:34 +0000 Subject: [PATCH 41/62] Update projects.php --- app/controllers/api/projects.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 80cf55fad..d1dfea724 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -522,7 +522,7 @@ App::patch('/v1/projects/:projectId/auth/duration') ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_PROJECT) ->param('projectId', '', new UID(), 'Project unique ID.') - ->param('duration', 525600, new Range(0, 525600), 'Project session length in minutes. Max length: 525600 minutes.') + ->param('duration', 31536000, new Range(0, 31536000), 'Project session length in seconds. Max length: 31536000 seconds.') ->inject('response') ->inject('dbForConsole') ->action(function (string $projectId, int $duration, Response $response, Database $dbForConsole) { @@ -534,7 +534,7 @@ App::patch('/v1/projects/:projectId/auth/duration') } $auths = $project->getAttribute('auths', []); - $auths['duration'] = $duration * 60; + $auths['duration'] = $duration; $dbForConsole->updateDocument('projects', $project->getId(), $project ->setAttribute('auths', $auths)); From f0052cbd8ec99b4567d6c6b1c2ce817cd379c7c1 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 15 Nov 2022 10:31:32 +0000 Subject: [PATCH 42/62] Update Tests --- .../Projects/ProjectsConsoleClientTest.php | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 3fd06f07e..3a09ce72a 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -434,7 +434,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'duration' => '1', // Set session duration to 2 minutes + 'duration' => 60, // Set session duration to 2 minutes ]); $this->assertEquals(200, $response['headers']['status-code']); @@ -484,8 +484,21 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); + // Check session doesn't expire too soon. + + sleep(30); + + // Get User + $response = $this->client->call(Client::METHOD_GET, '/account', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'Cookie' => $sessionCookie, + ])); + + $this->assertEquals(200, $response['headers']['status-code']); + // Wait just over a minute - sleep(65); + sleep(35); // Get User $response = $this->client->call(Client::METHOD_GET, '/account', array_merge([ @@ -501,7 +514,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ - 'duration' => 525600, + 'duration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, ]); $this->assertEquals(200, $response['headers']['status-code']); @@ -514,7 +527,7 @@ class ProjectsConsoleClientTest extends Scope ], $this->getHeaders())); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(31536000, $response['body']['authDuration']); // 1 Year + $this->assertEquals(Auth::TOKEN_EXPIRATION_LOGIN_LONG, $response['body']['authDuration']); // 1 Year return ['projectId' => $projectId]; } From f5a47019441bd1992b89b61ba84f8d0f60c1d890 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 15 Nov 2022 10:38:02 +0000 Subject: [PATCH 43/62] Run Linter --- tests/e2e/Services/Projects/ProjectsConsoleClientTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 3a09ce72a..cd9f032d6 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -494,7 +494,7 @@ class ProjectsConsoleClientTest extends Scope 'x-appwrite-project' => $projectId, 'Cookie' => $sessionCookie, ])); - + $this->assertEquals(200, $response['headers']['status-code']); // Wait just over a minute From 7288520f38208288ecb994b3fb4fe87587e5dc98 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 13:30:18 +0100 Subject: [PATCH 44/62] fix: realtime console project --- app/realtime.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/realtime.php b/app/realtime.php index 90c96de21..ac4e2d669 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -306,7 +306,7 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, if ($realtime->hasSubscriber($projectId, 'user:' . $userId)) { $connection = array_key_first(reset($realtime->subscriptions[$projectId]['user:' . $userId])); [$consoleDatabase, $returnConsoleDatabase] = getDatabase($register, '_console'); - $project = Authorization::skip(fn() => $consoleDatabase->getDocument('projects', $projectId)); + $project = Authorization::skip(fn () => $consoleDatabase->getDocument('projects', $projectId)); [$database, $returnDatabase] = getDatabase($register, "_{$project->getInternalId()}"); $user = $database->getDocument('users', $userId); @@ -484,6 +484,7 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $server->onMessage(function (int $connection, string $message) use ($server, $register, $realtime, $containerId) { try { + $app = new App('UTC'); $response = new Response(new SwooleResponse()); $db = $register->get('dbPool')->get(); $redis = $register->get('redisPool')->get(); @@ -493,12 +494,8 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace("_console"); $projectId = $realtime->connections[$connection]['projectId']; - - if ($projectId !== 'console') { - $project = Authorization::skip(fn() => $database->getDocument('projects', $projectId)); - $database->setNamespace("_{$project->getInternalId()}"); - } - + $project = $projectId === 'console' ? $app->getResource('console') : Authorization::skip(fn () => $database->getDocument('projects', $projectId)); + $database->setNamespace("_{$project->getInternalId()}"); /* * Abuse Check * From 522ae8d53805368156ad1041728fdd82de872a69 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 13:59:35 +0100 Subject: [PATCH 45/62] feat: migration for 1.1.x --- CHANGES.md | 10 +-- src/Appwrite/Migration/Migration.php | 2 +- src/Appwrite/Migration/Version/V16.php | 115 +++++++++++++++++++++++++ 3 files changed, 119 insertions(+), 8 deletions(-) create mode 100644 src/Appwrite/Migration/Version/V16.php diff --git a/CHANGES.md b/CHANGES.md index 488a4fe83..519107cc3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,19 +1,15 @@ # Version 1.1.0 - ## Features -- Added new property to projects configuration: `sessionDuration` which allows you to alter the duration of signed in sessions for your project. [#4618](https://github.com/appwrite/appwrite/pull/4618) +- Added new property to projects configuration: `authDuration` which allows you to alter the duration of signed in sessions for your project. [#4618](https://github.com/appwrite/appwrite/pull/4618) ## Bugs - Fix license detection for Flutter and Dart SDKs [#4435](https://github.com/appwrite/appwrite/pull/4435) -- Fix missing status, buildStderr and buildStderr from get deployment response [#4611](https://github.com/appwrite/appwrite/pull/4611) +- Fix missing `status`, `buildStderr` and `buildStderr` from get deployment response [#4611](https://github.com/appwrite/appwrite/pull/4611) +- Fix project pagination in DB usage aggregation [#4517](https://github.com/appwrite/appwrite/pull/4517) # Features - Added Auth Duration API to allow users to set the duration of their sessions. [#4618](https://github.com/appwrite/appwrite/pull/4618) -# Version 1.0.4 - -- Fix project pagination in DB usage collector [#4517](https://github.com/appwrite/appwrite/pull/4517) - # Version 1.0.3 ## Bugs - Fix document audit deletion [#4429](https://github.com/appwrite/appwrite/pull/4429) diff --git a/src/Appwrite/Migration/Migration.php b/src/Appwrite/Migration/Migration.php index d3833b6e7..9c6b03391 100644 --- a/src/Appwrite/Migration/Migration.php +++ b/src/Appwrite/Migration/Migration.php @@ -45,7 +45,7 @@ abstract class Migration '1.0.0' => 'V15', '1.0.1' => 'V15', '1.0.3' => 'V15', - '1.1.0' => 'V15', + '1.1.0' => 'V16', ]; /** diff --git a/src/Appwrite/Migration/Version/V16.php b/src/Appwrite/Migration/Version/V16.php new file mode 100644 index 000000000..7bc1b418d --- /dev/null +++ b/src/Appwrite/Migration/Version/V16.php @@ -0,0 +1,115 @@ + null, + fn () => [] + ); + } + + Console::log('Migrating Project: ' . $this->project->getAttribute('name') . ' (' . $this->project->getId() . ')'); + + Console::info('Migrating Collections'); + $this->migrateCollections(); + + Console::info('Migrating Documents'); + $this->forEachDocument([$this, 'fixDocument']); + } + + /** + * Migrate all Collections. + * + * @return void + */ + protected function migrateCollections(): void + { + foreach ($this->collections as $collection) { + $id = $collection['$id']; + + Console::log("Migrating Collection \"{$id}\""); + + $this->projectDB->setNamespace("_{$this->project->getInternalId()}"); + + switch ($id) { + case 'sessions': + try { + /** + * Create 'compression' attribute + */ + $this->projectDB->deleteAttribute($id, 'expire'); + } catch (\Throwable $th) { + Console::warning("'expire' from {$id}: {$th->getMessage()}"); + } + + break; + + case 'projects': + try { + /** + * Create 'region' attribute + */ + $this->createAttributeFromCollection($this->projectDB, $id, 'region'); + } catch (\Throwable $th) { + Console::warning("'region' from {$id}: {$th->getMessage()}"); + } + + try { + /** + * Create '_key_team' index + */ + $this->createIndexFromCollection($this->projectDB, $id, '_key_team'); + } catch (\Throwable $th) { + Console::warning("'_key_team' from {$id}: {$th->getMessage()}"); + } + + default: + break; + } + + usleep(50000); + } + } + + /** + * Fix run on each document + * + * @param \Utopia\Database\Document $document + * @return \Utopia\Database\Document + */ + protected function fixDocument(Document $document) + { + switch ($document->getCollection()) { + case 'projects': + /** + * Bump version number. + */ + $document->setAttribute('version', '1.1.0'); + + /** + * Set default authDuration + */ + $document->setAttribute('auths', array_merge($document->getAttribute('auths', []), [ + 'duration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG + ])); + break; + } + + return $document; + } +} From 85ed70f346062bcc3f68d6194e7e14ca9d67bdfb Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 14:02:14 +0100 Subject: [PATCH 46/62] fix: remove Dockerfile leftovers --- Dockerfile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index d7c4f027a..f63ed3ddd 100755 --- a/Dockerfile +++ b/Dockerfile @@ -14,11 +14,6 @@ RUN composer install --ignore-platform-reqs --optimize-autoloader \ FROM node:16.14.2-alpine3.15 as node -ARG CONSOLE_ANALYTICS -ARG CONSOLE_LOGGER -ENV VITE_GOOGLE_ANALYTICS=$CONSOLE_ANALYTICS -ENV VITE_SENTRY_DSN=$CONSOLE_LOGGER - COPY app/console /usr/local/src/console WORKDIR /usr/local/src/console From 35b7a2ee96524004656374d5149a9994693a38f0 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 15:22:57 +0100 Subject: [PATCH 47/62] fix: linter --- app/console | 1 + phpcs.xml | 2 ++ src/Appwrite/Migration/Version/V16.php | 1 + 3 files changed, 4 insertions(+) create mode 160000 app/console diff --git a/app/console b/app/console new file mode 160000 index 000000000..0ed6e0c49 --- /dev/null +++ b/app/console @@ -0,0 +1 @@ +Subproject commit 0ed6e0c497931f16fcb0750fe351d1d3577a7d97 diff --git a/phpcs.xml b/phpcs.xml index cb31d549e..ccde5812b 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -7,6 +7,8 @@ ./app/sdks + + ./app/console * diff --git a/src/Appwrite/Migration/Version/V16.php b/src/Appwrite/Migration/Version/V16.php index 7bc1b418d..311cbaff2 100644 --- a/src/Appwrite/Migration/Version/V16.php +++ b/src/Appwrite/Migration/Version/V16.php @@ -77,6 +77,7 @@ class V16 extends Migration } catch (\Throwable $th) { Console::warning("'_key_team' from {$id}: {$th->getMessage()}"); } + break; default: break; From 10695a021a2235ca77e22f9ce4913b734d265d37 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 15:35:42 +0100 Subject: [PATCH 48/62] fix: usage tests timeout --- tests/e2e/General/UsageTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/e2e/General/UsageTest.php b/tests/e2e/General/UsageTest.php index 572bc4abf..e5f02837b 100644 --- a/tests/e2e/General/UsageTest.php +++ b/tests/e2e/General/UsageTest.php @@ -85,7 +85,7 @@ class UsageTest extends Scope #[Retry(count: 1)] public function testUsersStats(array $data): array { - sleep(10); + sleep(20); $projectId = $data['projectId']; $headers = $data['headers']; @@ -256,7 +256,7 @@ class UsageTest extends Scope $filesCreate = $data['filesCreate']; $filesDelete = $data['filesDelete']; - sleep(10); + sleep(20); // console request $headers = [ @@ -414,7 +414,7 @@ class UsageTest extends Scope $this->assertEquals('name', $res['body']['key']); $collectionsUpdate++; $requestsCount++; - sleep(10); + sleep(20); for ($i = 0; $i < 10; $i++) { $name = uniqid() . ' collection'; @@ -496,7 +496,7 @@ class UsageTest extends Scope $documentsRead = $data['documentsRead']; $documentsDelete = $data['documentsDelete']; - sleep(10); + sleep(20); // check datbase stats $headers = [ @@ -704,7 +704,7 @@ class UsageTest extends Scope $executions = $data['executions']; $failures = $data['failures']; - sleep(10); + sleep(20); $response = $this->client->call(Client::METHOD_GET, '/functions/' . $functionId . '/usage', $headers, [ 'range' => '30d' From aff29ed197c80d21e0883cacd7a052559030f9a5 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 15:36:37 +0100 Subject: [PATCH 49/62] fix: update console --- app/console | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/console b/app/console index 0ed6e0c49..c601671e9 160000 --- a/app/console +++ b/app/console @@ -1 +1 @@ -Subproject commit 0ed6e0c497931f16fcb0750fe351d1d3577a7d97 +Subproject commit c601671e962d9c30612f4304f30af7afabf15a38 From 18618b8e8b3e3edc5b1947f35805b783b1dd5060 Mon Sep 17 00:00:00 2001 From: shimon Date: Tue, 15 Nov 2022 17:17:35 +0200 Subject: [PATCH 50/62] cancel cache via avatar::initials --- app/controllers/api/avatars.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/api/avatars.php b/app/controllers/api/avatars.php index b7aef1505..c4b19b107 100644 --- a/app/controllers/api/avatars.php +++ b/app/controllers/api/avatars.php @@ -342,7 +342,6 @@ App::get('/v1/avatars/initials') ->desc('Get User Initials') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') - ->label('cache', true) ->label('cache.resource', 'avatar/initials') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'avatars') From 29edecf05da14cb36f2fa5ab33b225952883b840 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 16:19:13 +0100 Subject: [PATCH 51/62] fix: tests --- app/console | 2 +- tests/e2e/General/HTTPTest.php | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/console b/app/console index c601671e9..d7491462f 160000 --- a/app/console +++ b/app/console @@ -1 +1 @@ -Subproject commit c601671e962d9c30612f4304f30af7afabf15a38 +Subproject commit d7491462f2ac1605fad0547d7bb6e2e4bbbc2233 diff --git a/tests/e2e/General/HTTPTest.php b/tests/e2e/General/HTTPTest.php index 0cb7625ba..5d20c3533 100644 --- a/tests/e2e/General/HTTPTest.php +++ b/tests/e2e/General/HTTPTest.php @@ -38,16 +38,17 @@ class HTTPTest extends Scope /** * Test for SUCCESS */ - $response = $this->client->call(Client::METHOD_GET, '/error', \array_merge([ - 'origin' => 'http://localhost', - 'content-type' => 'application/json', - ]), []); + //TODO: Add after Console + // $response = $this->client->call(Client::METHOD_GET, '/error', \array_merge([ + // 'origin' => 'http://localhost', + // 'content-type' => 'application/json', + // ]), []); - $this->assertEquals(404, $response['headers']['status-code']); - $this->assertEquals('Not Found', $response['body']['message']); - $this->assertEquals(Exception::GENERAL_ROUTE_NOT_FOUND, $response['body']['type']); - $this->assertEquals(404, $response['body']['code']); - $this->assertEquals('dev', $response['body']['version']); + // $this->assertEquals(404, $response['headers']['status-code']); + // $this->assertEquals('Not Found', $response['body']['message']); + // $this->assertEquals(Exception::GENERAL_ROUTE_NOT_FOUND, $response['body']['type']); + // $this->assertEquals(404, $response['body']['code']); + // $this->assertEquals('dev', $response['body']['version']); } public function testManifest() From 5db924627ae940b21e4b9069584f598fdd6f462e Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 16:28:33 +0100 Subject: [PATCH 52/62] fix: tests --- tests/e2e/General/HTTPTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/General/HTTPTest.php b/tests/e2e/General/HTTPTest.php index 5d20c3533..e191fc471 100644 --- a/tests/e2e/General/HTTPTest.php +++ b/tests/e2e/General/HTTPTest.php @@ -38,7 +38,7 @@ class HTTPTest extends Scope /** * Test for SUCCESS */ - //TODO: Add after Console + $this->markTestIncomplete('This test needs to be updated for the new console.'); // $response = $this->client->call(Client::METHOD_GET, '/error', \array_merge([ // 'origin' => 'http://localhost', // 'content-type' => 'application/json', From 1b533daeaa500951ea3bdb76a89ce51b43cf0a04 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 16:30:53 +0100 Subject: [PATCH 53/62] fix: remove manifest endpoint --- app/controllers/general.php | 26 -------------------------- tests/e2e/General/HTTPTest.php | 19 ------------------- 2 files changed, 45 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index fd7599595..48c80ab73 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -566,32 +566,6 @@ App::error() ); }); -App::get('/manifest.json') - ->desc('Progressive app manifest file') - ->label('scope', 'public') - ->label('docs', false) - ->inject('response') - ->action(function (Response $response) { - - $response->json([ - 'name' => APP_NAME, - 'short_name' => APP_NAME, - 'start_url' => '.', - 'url' => 'https://appwrite.io/', - 'display' => 'standalone', - 'background_color' => '#fff', - 'theme_color' => '#f02e65', - 'description' => 'End to end backend server for frontend and mobile apps. 👩‍💻👨‍💻', - 'icons' => [ - [ - 'src' => 'images/favicon.png', - 'sizes' => '256x256', - 'type' => 'image/png', - ], - ], - ]); - }); - App::get('/robots.txt') ->desc('Robots.txt File') ->label('scope', 'public') diff --git a/tests/e2e/General/HTTPTest.php b/tests/e2e/General/HTTPTest.php index e191fc471..c9c08bb40 100644 --- a/tests/e2e/General/HTTPTest.php +++ b/tests/e2e/General/HTTPTest.php @@ -51,25 +51,6 @@ class HTTPTest extends Scope // $this->assertEquals('dev', $response['body']['version']); } - public function testManifest() - { - /** - * Test for SUCCESS - */ - $response = $this->client->call(Client::METHOD_GET, '/manifest.json', \array_merge([ - 'origin' => 'http://localhost', - 'content-type' => 'application/json', - ]), []); - - $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals('Appwrite', $response['body']['name']); - $this->assertEquals('Appwrite', $response['body']['short_name']); - $this->assertEquals('.', $response['body']['start_url']); - $this->assertEquals('.', $response['body']['start_url']); - $this->assertEquals('https://appwrite.io/', $response['body']['url']); - $this->assertEquals('standalone', $response['body']['display']); - } - public function testHumans() { /** From 68e1a0b114cec7f90ea11ced2dad6a2c8a5fbb17 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 16:31:38 +0100 Subject: [PATCH 54/62] fix: remove unused import --- tests/e2e/General/HTTPTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/e2e/General/HTTPTest.php b/tests/e2e/General/HTTPTest.php index c9c08bb40..68686542b 100644 --- a/tests/e2e/General/HTTPTest.php +++ b/tests/e2e/General/HTTPTest.php @@ -2,7 +2,6 @@ namespace Tests\E2E\General; -use Appwrite\Extend\Exception; use Tests\E2E\Client; use Tests\E2E\Scopes\ProjectNone; use Tests\E2E\Scopes\Scope; From 50dc4c3790bf30be3df3345a4fc258b51bc015fe Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 16:43:42 +0100 Subject: [PATCH 55/62] chore: refresh specs --- app/config/specs/open-api3-latest-client.json | 2 +- app/config/specs/open-api3-latest-console.json | 2 +- app/config/specs/open-api3-latest-server.json | 2 +- app/config/specs/swagger2-latest-client.json | 2 +- app/config/specs/swagger2-latest-console.json | 2 +- app/config/specs/swagger2-latest-server.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index 6a5ffe441..70b5a99cd 100644 --- a/app/config/specs/open-api3-latest-client.json +++ b/app/config/specs/open-api3-latest-client.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":203,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":202,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":204,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":140,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":139,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":141,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":145,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":146,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":144,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":150,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":149,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":151,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":152,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":153,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":155,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":154,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":156,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":159,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":158,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":18,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":6,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":25,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":17,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":21,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":23,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":24,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":26,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":19,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":27,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":32,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":33,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":20,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":31,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":16,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":7,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":12,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":8,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":14,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":22,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":30,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":29,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":28,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":34,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":35,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":36,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":38,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":74,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":73,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":75,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":77,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":78,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":82,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":86,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":83,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":87,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":88,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index a92a1880d..1788e6fc9 100644 --- a/app/config/specs/open-api3-latest-console.json +++ b/app/config/specs/open-api3-latest-console.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabases"}}}}},"x-appwrite":{"method":"getUsage","weight":80,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listDocumentLogs","weight":77,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listCollectionLogs","weight":55,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageCollection"}}}}},"x-appwrite":{"method":"getCollectionUsage","weight":82,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":49,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabase"}}}}},"x-appwrite":{"method":"getDatabaseUsage","weight":81,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":189,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":188,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":190,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getUsage","weight":193,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":191,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":194,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":196,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":198,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":197,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":195,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":200,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":201,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":203,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":202,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":204,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getFunctionUsage","weight":192,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":206,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":205,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":207,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":208,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":209,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/projectList"}}}}},"x-appwrite":{"method":"list","weight":103,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","tags":["projects"],"description":"","responses":{"201":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"create","weight":102,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}}}}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"get","weight":104,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"update","weight":106,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Project","operationId":"projectsDelete","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":112,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/projects\/{projectId}\/auth\/duration":{"patch":{"summary":"Update Project Authentication Duration","operationId":"projectsUpdateAuthDuration","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthDuration","weight":110,"cookies":false,"type":"","demo":"projects\/update-auth-duration.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"duration":{"type":"integer","description":"Project session length in minutes. Max length: 525600 minutes.","x-example":0}},"required":["duration"]}}}}}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthLimit","weight":109,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","x-example":0}},"required":["limit"]}}}}}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthStatus","weight":111,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"schema":{"type":"string","x-example":"email-password"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","x-example":false}},"required":["status"]}}}}}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domainList"}}}}},"x-appwrite":{"method":"listDomains","weight":130,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","tags":["projects"],"description":"","responses":{"201":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"createDomain","weight":129,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","x-example":null}},"required":["domain"]}}}}}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"getDomain","weight":131,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":133,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"updateDomainVerification","weight":132,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/keyList"}}}}},"x-appwrite":{"method":"listKeys","weight":120,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","tags":["projects"],"description":"","responses":{"201":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"createKey","weight":119,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"getKey","weight":121,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"updateKey","weight":122,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":123,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateOAuth2","weight":108,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","x-example":false}},"required":["provider"]}}}}}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platformList"}}}}},"x-appwrite":{"method":"listPlatforms","weight":125,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","tags":["projects"],"description":"","responses":{"201":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"createPlatform","weight":124,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","x-example":null}},"required":["type","name"]}}}}}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"getPlatform","weight":126,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"updatePlatform","weight":127,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","x-example":null}},"required":["name"]}}}}},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":128,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateServiceStatus","weight":107,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","x-example":"account"},"status":{"type":"boolean","description":"Service status.","x-example":false}},"required":["service","status"]}}}}}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageProject"}}}}},"x-appwrite":{"method":"getUsage","weight":105,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhookList"}}}}},"x-appwrite":{"method":"listWebhooks","weight":114,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"createWebhook","weight":113,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"getWebhook","weight":115,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhook","weight":116,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":118,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhookSignature","weight":117,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":135,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":134,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":136,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":137,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":138,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":140,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":139,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":141,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":145,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":146,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":144,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageStorage"}}}}},"x-appwrite":{"method":"getUsage","weight":147,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageBuckets"}}}}},"x-appwrite":{"method":"getBucketUsage","weight":148,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":150,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":149,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":151,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":152,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":153,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":160,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":155,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":154,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":156,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":159,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":158,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":169,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":161,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":164,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":162,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":163,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":166,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":168,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":165,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageUsers"}}}}},"x-appwrite":{"method":"getUsage","weight":187,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"provider","description":"Provider Name.","required":false,"schema":{"type":"string","x-example":"email","default":""},"in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":170,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":186,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":180,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":174,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":173,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":178,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":179,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":181,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":171,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":183,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":172,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":185,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":184,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":175,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":182,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":177,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"$ref":"#\/components\/schemas\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authDuration":{"type":"string","description":"Session duration in seconds.","x-example":"30"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"$ref":"#\/components\/schemas\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authDuration","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databases":{"type":"array","description":"Aggregated stats for number of databases.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buckets":{"type":"array","description":"Aggregated stats for number of buckets.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","databases","users","storage","buckets"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":18,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"create","weight":6,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":25,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":17,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":21,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":23,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":24,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":26,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":19,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":27,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":32,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":33,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":20,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":31,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":16,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailSession","weight":7,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLSession","weight":12,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}}}},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":8,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"schema":{"type":"string","x-example":"amazon"},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneSession","weight":14,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":22,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":30,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":29,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":28,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":34,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":35,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":36,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":38,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":46,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":45,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabases"}}}}},"x-appwrite":{"method":"getUsage","weight":79,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":47,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":49,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":50,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":52,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":51,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":53,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":55,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":56,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":66,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":57,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":67,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":74,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":73,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":75,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":77,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":78,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listDocumentLogs","weight":76,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":70,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":69,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":71,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":72,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listCollectionLogs","weight":54,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageCollection"}}}}},"x-appwrite":{"method":"getCollectionUsage","weight":81,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":48,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageDatabase"}}}}},"x-appwrite":{"method":"getDatabaseUsage","weight":80,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"range","description":"`Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getUsage","weight":192,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageFunctions"}}}}},"x-appwrite":{"method":"getFunctionUsage","weight":191,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":89,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":99,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":92,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":91,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":94,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":98,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":93,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":82,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":86,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":83,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":87,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":88,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/projectList"}}}}},"x-appwrite":{"method":"list","weight":102,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","tags":["projects"],"description":"","responses":{"201":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"create","weight":101,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}}}}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"get","weight":103,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"update","weight":105,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Project","operationId":"projectsDelete","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":111,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/projects\/{projectId}\/auth\/duration":{"patch":{"summary":"Update Project Authentication Duration","operationId":"projectsUpdateAuthDuration","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthDuration","weight":109,"cookies":false,"type":"","demo":"projects\/update-auth-duration.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"duration":{"type":"integer","description":"Project session length in seconds. Max length: 31536000 seconds.","x-example":0}},"required":["duration"]}}}}}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthLimit","weight":108,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","x-example":0}},"required":["limit"]}}}}}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateAuthStatus","weight":110,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"schema":{"type":"string","x-example":"email-password"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","x-example":false}},"required":["status"]}}}}}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domainList"}}}}},"x-appwrite":{"method":"listDomains","weight":129,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","tags":["projects"],"description":"","responses":{"201":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"createDomain","weight":128,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","x-example":null}},"required":["domain"]}}}}}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"getDomain","weight":130,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":132,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","tags":["projects"],"description":"","responses":{"200":{"description":"Domain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/domain"}}}}},"x-appwrite":{"method":"updateDomainVerification","weight":131,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"schema":{"type":"string","x-example":"[DOMAIN_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/keyList"}}}}},"x-appwrite":{"method":"listKeys","weight":119,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","tags":["projects"],"description":"","responses":{"201":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"createKey","weight":118,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"getKey","weight":120,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","tags":["projects"],"description":"","responses":{"200":{"description":"Key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/key"}}}}},"x-appwrite":{"method":"updateKey","weight":121,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}}}},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":122,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"schema":{"type":"string","x-example":"[KEY_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateOAuth2","weight":107,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","x-example":false}},"required":["provider"]}}}}}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platformList"}}}}},"x-appwrite":{"method":"listPlatforms","weight":124,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","tags":["projects"],"description":"","responses":{"201":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"createPlatform","weight":123,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","x-example":null}},"required":["type","name"]}}}}}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"getPlatform","weight":125,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","tags":["projects"],"description":"","responses":{"200":{"description":"Platform","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/platform"}}}}},"x-appwrite":{"method":"updatePlatform","weight":126,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","x-example":null}},"required":["name"]}}}}},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":127,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"schema":{"type":"string","x-example":"[PLATFORM_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","tags":["projects"],"description":"","responses":{"200":{"description":"Project","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/project"}}}}},"x-appwrite":{"method":"updateServiceStatus","weight":106,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","x-example":"account"},"status":{"type":"boolean","description":"Service status.","x-example":false}},"required":["service","status"]}}}}}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageProject"}}}}},"x-appwrite":{"method":"getUsage","weight":104,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhookList"}}}}},"x-appwrite":{"method":"listWebhooks","weight":113,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"createWebhook","weight":112,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"getWebhook","weight":114,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhook","weight":115,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}}}},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":117,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/webhook"}}}}},"x-appwrite":{"method":"updateWebhookSignature","weight":116,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"schema":{"type":"string","x-example":"[PROJECT_ID]"},"in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"schema":{"type":"string","x-example":"[WEBHOOK_ID]"},"in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageStorage"}}}}},"x-appwrite":{"method":"getUsage","weight":146,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageBuckets"}}}}},"x-appwrite":{"method":"getBucketUsage","weight":147,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":159,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/usageUsers"}}}}},"x-appwrite":{"method":"getUsage","weight":186,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"schema":{"type":"string","x-example":"24h","default":"30d"},"in":"query"},{"name":"provider","description":"Provider Name.","required":false,"schema":{"type":"string","x-example":"email","default":""},"in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"$ref":"#\/components\/schemas\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authDuration":{"type":"integer","description":"Session duration in seconds.","x-example":60,"format":"int32"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"$ref":"#\/components\/schemas\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"$ref":"#\/components\/schemas\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"$ref":"#\/components\/schemas\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"$ref":"#\/components\/schemas\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"$ref":"#\/components\/schemas\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authDuration","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"databases":{"type":"array","description":"Aggregated stats for number of databases.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]},"buckets":{"type":"array","description":"Aggregated stats for number of buckets.","items":{"$ref":"#\/components\/schemas\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","databases","users","storage","buckets"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index 942ac4662..e981a7abf 100644 --- a/app/config/specs/open-api3-latest-server.json +++ b/app/config/specs/open-api3-latest-server.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":189,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":188,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":190,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":191,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":194,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":196,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":198,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":197,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":195,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":200,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":201,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":203,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":202,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":204,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":206,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":205,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":207,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":208,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":209,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":135,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":134,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":136,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":137,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":138,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":140,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":139,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":141,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":145,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":146,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":144,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":150,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":149,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":151,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":152,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":153,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":155,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":154,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":156,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":159,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":158,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":169,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":161,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":164,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":162,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":163,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":166,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":168,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":165,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":170,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":186,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":180,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":174,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":173,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":178,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":179,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":181,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":171,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":183,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":172,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":185,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":184,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":175,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":182,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":177,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"openapi":"3.0.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/HOSTNAME\/v1"}],"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"get","weight":18,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateEmail","weight":25,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":21,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateName","weight":23,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePassword","weight":24,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePhone","weight":26,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":19,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updatePrefs","weight":27,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":32,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":33,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}}}}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":20,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":31,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":22,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":30,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":29,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/account"}}}}},"x-appwrite":{"method":"updateStatus","weight":28,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":34,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":35,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":36,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":38,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af"},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"[NAME]","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":"[TEXT]"},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/databaseList"}}}}},"x-appwrite":{"method":"list","weight":46,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"create","weight":45,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["databaseId","name"]}}}}}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"get","weight":47,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/database"}}}}},"x-appwrite":{"method":"update","weight":49,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Database","operationId":"databasesDelete","tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":50,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collectionList"}}}}},"x-appwrite":{"method":"listCollections","weight":52,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"createCollection","weight":51,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false}},"required":["collectionId","name"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"getCollection","weight":53,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/collection"}}}}},"x-appwrite":{"method":"updateCollection","weight":55,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":56,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeList"}}}}},"x-appwrite":{"method":"listAttributes","weight":66,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeBoolean"}}}}},"x-appwrite":{"method":"createBooleanAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeDatetime"}}}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEmail"}}}}},"x-appwrite":{"method":"createEmailAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeEnum"}}}}},"x-appwrite":{"method":"createEnumAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","elements","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeFloat"}}}}},"x-appwrite":{"method":"createFloatAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeInteger"}}}}},"x-appwrite":{"method":"createIntegerAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeIp"}}}}},"x-appwrite":{"method":"createIpAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeString"}}}}},"x-appwrite":{"method":"createStringAttribute","weight":57,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","x-example":1},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","size","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/attributeUrl"}}}}},"x-appwrite":{"method":"createUrlAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":null},"required":{"type":"boolean","description":"Is attribute required?","x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false}},"required":["key","required"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","content":{"application\/json":{"schema":{"oneOf":[{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]}}}}},"x-appwrite":{"method":"getAttribute","weight":67,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Attribute Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":74,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":73,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":75,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":77,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":78,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":"[DOCUMENT_ID]"},"in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/indexList"}}}}},"x-appwrite":{"method":"listIndexes","weight":70,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","tags":["databases"],"description":"","responses":{"202":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"createIndex","weight":69,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":null},"type":{"type":"string","description":"Index type.","x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","tags":["databases"],"description":"","responses":{"200":{"description":"Index","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/index"}}}}},"x-appwrite":{"method":"getIndex","weight":71,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":72,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"schema":{"type":"string","x-example":"[DATABASE_ID]"},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":"[COLLECTION_ID]"},"in":"path"},{"name":"key","description":"Index Key.","required":true,"schema":{"type":"string"},"in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/functionList"}}}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["functionId","name","execute","runtime"]}}}}}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/runtimeList"}}}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","x-example":false}},"required":["name","execute"]}}}}},"delete":{"summary":"Delete Function","operationId":"functionsDelete","tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deploymentList"}}}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"entrypoint":{"type":"string","description":"Entrypoint File.","x-example":"[ENTRYPOINT]"},"code":{"type":"string","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","x-example":null},"activate":{"type":"boolean","description":"Automatically activate the deployment when it is finished building.","x-example":false}},"required":["entrypoint","code","activate"]}}}}}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/deployment"}}}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/function"}}}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"schema":{"type":"string","x-example":"[DEPLOYMENT_ID]"},"in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"schema":{"type":"string","x-example":"[BUILD_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":"[EXECUTION_ID]"},"in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variableList"}}}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key","value"]}}}}}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/variable"}}}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","x-example":"[VALUE]"}},"required":["key"]}}}}},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"schema":{"type":"string","x-example":"[FUNCTION_ID]"},"in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"schema":{"type":"string","x-example":"[VARIABLE_ID]"},"in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"get","weight":89,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthAntivirus"}}}}},"x-appwrite":{"method":"getAntivirus","weight":99,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getCache","weight":92,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getDB","weight":91,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueCertificates","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueFunctions","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueLogs","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthQueue"}}}}},"x-appwrite":{"method":"getQueueWebhooks","weight":94,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthStatus"}}}}},"x-appwrite":{"method":"getStorageLocal","weight":98,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/healthTime"}}}}},"x-appwrite":{"method":"getTime","weight":93,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":82,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":86,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":83,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":87,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":88,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucketList"}}}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["bucketId","name"]}}}}}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/bucket"}}}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","x-example":false}},"required":["name"]}}}}},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[FILE_ID]","x-upload-id":true},"file":{"type":"string","description":"Binary file.","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":"[BUCKET_ID]"},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":"[FILE_ID]"},"in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}},"delete":{"summary":"Delete Team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":"[NAME]"}},"required":["email","roles","url"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":"[TEAM_ID]"},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"[MEMBERSHIP_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","x-example":"[SECRET]"}},"required":["userId","secret"]}}}}}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/userList"}}}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"[SEARCH]","default":""},"in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId"]}}}}}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}}}}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}}}}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["userId","email","password"]}}}}}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"}},"required":["email"]}}}}}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":"[NAME]"}},"required":["name"]}}}}}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","x-example":"+12065550100"}},"required":["number"]}}}}}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"schema":{"type":"string","x-example":"[SESSION_ID]"},"in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","x-example":false}},"required":["status"]}}}}}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","x-example":false}},"required":["emailVerification"]}}}}}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"schema":{"type":"string","x-example":"[USER_ID]"},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","x-example":false}},"required":["phoneVerification"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"components":{"schemas":{"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"$ref":"#\/components\/schemas\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"$ref":"#\/components\/schemas\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"$ref":"#\/components\/schemas\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"$ref":"#\/components\/schemas\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"$ref":"#\/components\/schemas\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"$ref":"#\/components\/schemas\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"$ref":"#\/components\/schemas\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"$ref":"#\/components\/schemas\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"anyOf":[{"$ref":"#\/components\/schemas\/attributeBoolean"},{"$ref":"#\/components\/schemas\/attributeInteger"},{"$ref":"#\/components\/schemas\/attributeFloat"},{"$ref":"#\/components\/schemas\/attributeEmail"},{"$ref":"#\/components\/schemas\/attributeEnum"},{"$ref":"#\/components\/schemas\/attributeUrl"},{"$ref":"#\/components\/schemas\/attributeIp"},{"$ref":"#\/components\/schemas\/attributeDatetime"},{"$ref":"#\/components\/schemas\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"$ref":"#\/components\/schemas\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index 1e3aa58a4..6a213bbf4 100644 --- a/app/config/specs/swagger2-latest-client.json +++ b/app/config/specs/swagger2-latest-client.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":203,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":202,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":204,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":140,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":139,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID. Choose your own unique ID or pass the string `ID.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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":141,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":145,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":146,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":144,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":150,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":149,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":151,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":152,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":153,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":155,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":154,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":156,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":159,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":158,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":18,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":6,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":25,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":17,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":21,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":23,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":24,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":26,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":19,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":27,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":32,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":33,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":20,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":31,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":16,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":7,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":12,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":8,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":14,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":22,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":30,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":29,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":28,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":34,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":35,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":36,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":38,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":74,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":73,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":75,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":77,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":78,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":82,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":86,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":83,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":87,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":88,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID. Choose your own unique ID or pass the string `ID.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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index 22ea63005..8ed4993f3 100644 --- a/app/config/specs/swagger2-latest-console.json +++ b/app/config/specs/swagger2-latest-console.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":18,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":17,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":8,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":14,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":9,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":16,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","schema":{"$ref":"#\/definitions\/usageDatabases"}}},"x-appwrite":{"method":"getUsage","weight":80,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listDocumentLogs","weight":77,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listCollectionLogs","weight":55,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","schema":{"$ref":"#\/definitions\/usageCollection"}}},"x-appwrite":{"method":"getCollectionUsage","weight":82,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":49,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","schema":{"$ref":"#\/definitions\/usageDatabase"}}},"x-appwrite":{"method":"getDatabaseUsage","weight":81,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":189,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":188,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":190,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getUsage","weight":193,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":191,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":194,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":196,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":198,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":197,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":195,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":200,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":201,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":203,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":202,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":204,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getFunctionUsage","weight":192,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":206,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":205,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":207,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":208,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":209,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","schema":{"$ref":"#\/definitions\/projectList"}}},"x-appwrite":{"method":"list","weight":103,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"create","weight":102,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","default":null,"x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","default":null,"x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}]}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"get","weight":104,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"update","weight":106,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}]},"delete":{"summary":"Delete Project","operationId":"projectsDelete","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":112,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/projects\/{projectId}\/auth\/duration":{"patch":{"summary":"Update Project Authentication Duration","operationId":"projectsUpdateAuthDuration","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthDuration","weight":110,"cookies":false,"type":"","demo":"projects\/update-auth-duration.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"duration":{"type":"integer","description":"Project session length in minutes. Max length: 525600 minutes.","default":null,"x-example":0}},"required":["duration"]}}]}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthLimit","weight":109,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","default":null,"x-example":0}},"required":["limit"]}}]}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthStatus","weight":111,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"type":"string","x-example":"email-password","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","default":null,"x-example":false}},"required":["status"]}}]}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","schema":{"$ref":"#\/definitions\/domainList"}}},"x-appwrite":{"method":"listDomains","weight":130,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"createDomain","weight":129,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","default":null,"x-example":null}},"required":["domain"]}}]}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"getDomain","weight":131,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":133,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"updateDomainVerification","weight":132,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","schema":{"$ref":"#\/definitions\/keyList"}}},"x-appwrite":{"method":"listKeys","weight":120,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"createKey","weight":119,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"getKey","weight":121,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"updateKey","weight":122,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":123,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateOAuth2","weight":108,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","default":null,"x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","default":null,"x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","default":null,"x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","default":null,"x-example":false}},"required":["provider"]}}]}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","schema":{"$ref":"#\/definitions\/platformList"}}},"x-appwrite":{"method":"listPlatforms","weight":125,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"createPlatform","weight":124,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","default":null,"x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","default":"","x-example":null}},"required":["type","name"]}}]}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"getPlatform","weight":126,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"updatePlatform","weight":127,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","default":"","x-example":null}},"required":["name"]}}]},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":128,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateServiceStatus","weight":107,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","default":null,"x-example":"account"},"status":{"type":"boolean","description":"Service status.","default":null,"x-example":false}},"required":["service","status"]}}]}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","schema":{"$ref":"#\/definitions\/usageProject"}}},"x-appwrite":{"method":"getUsage","weight":105,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","schema":{"$ref":"#\/definitions\/webhookList"}}},"x-appwrite":{"method":"listWebhooks","weight":114,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"createWebhook","weight":113,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"getWebhook","weight":115,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhook","weight":116,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":118,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhookSignature","weight":117,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":135,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":134,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":136,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":137,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":138,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":140,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":139,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID. Choose your own unique ID or pass the string `ID.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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":141,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":145,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":146,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":144,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","schema":{"$ref":"#\/definitions\/usageStorage"}}},"x-appwrite":{"method":"getUsage","weight":147,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","schema":{"$ref":"#\/definitions\/usageBuckets"}}},"x-appwrite":{"method":"getBucketUsage","weight":148,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":150,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":149,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":151,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":152,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":153,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":160,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":155,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":154,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":156,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":159,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":158,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":169,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":161,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":164,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":162,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":163,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":166,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":168,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":165,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","schema":{"$ref":"#\/definitions\/usageUsers"}}},"x-appwrite":{"method":"getUsage","weight":187,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"provider","description":"Provider Name.","required":false,"type":"string","x-example":"email","default":"","in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":170,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":186,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":180,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":174,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":173,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":178,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":179,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":181,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":171,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":183,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":172,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":185,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":184,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":175,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":182,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":177,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"type":"object","$ref":"#\/definitions\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authDuration":{"type":"string","description":"Session duration in seconds.","x-example":"30"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"type":"object","$ref":"#\/definitions\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authDuration","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databases":{"type":"array","description":"Aggregated stats for number of databases.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buckets":{"type":"array","description":"Aggregated stats for number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","databases","users","storage","buckets"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Mode":{"type":"apiKey","name":"X-Appwrite-Mode","description":"","in":"header","x-appwrite":{"demo":""}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":18,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"post":{"summary":"Create Account","operationId":"accountCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](\/docs\/client\/account#accountCreateVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](\/docs\/client\/account#accountCreateSession).","responses":{"201":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"create","weight":6,"cookies":false,"type":"","demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":25,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","schema":{"$ref":"#\/definitions\/jwt"}}},"x-appwrite":{"method":"createJWT","weight":17,"cookies":false,"type":"","demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":21,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":23,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":24,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":26,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":19,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":27,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":32,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":33,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":20,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":31,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create Anonymous Session","operationId":"accountCreateAnonymousSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](\/docs\/client\/account#accountUpdateEmail) or create an [OAuth2 session](\/docs\/client\/account#accountCreateOAuth2Session).","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createAnonymousSession","weight":16,"cookies":false,"type":"","demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create Email Session","operationId":"accountCreateEmailSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.","responses":{"201":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"createEmailSession","weight":7,"cookies":false,"type":"","demo":"account\/create-email-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/sessions\/magic-url":{"post":{"summary":"Create Magic URL session","operationId":"accountCreateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [PUT \/account\/sessions\/magic-url](\/docs\/client\/account#accountUpdateMagicURLSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createMagicURLSession","weight":12,"cookies":false,"type":"","demo":"account\/create-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":"","x-example":"https:\/\/example.com"}},"required":["userId","email"]}}]},"put":{"summary":"Create Magic URL session (confirmation)","operationId":"accountUpdateMagicURLSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating the session with the Magic URL. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/sessions\/magic-url](\/docs\/client\/account#accountCreateMagicURLSession) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateMagicURLSession","weight":13,"cookies":false,"type":"","demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-magic-url-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 Session","operationId":"accountCreateOAuth2Session","consumes":["application\/json"],"produces":["text\/html"],"tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user..\n","responses":{"301":{"description":"No content"}},"x-appwrite":{"method":"createOAuth2Session","weight":8,"cookies":false,"type":"webAuth","demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoom.","required":true,"type":"string","x-example":"amazon","in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"type":"string","format":"url","x-example":"https:\/\/example.com","default":"","in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/sessions\/phone":{"post":{"summary":"Create Phone session","operationId":"accountCreatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT \/account\/sessions\/phone](\/docs\/client\/account#accountUpdatePhoneSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneSession","weight":14,"cookies":false,"type":"","demo":"account\/create-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"}},"required":["userId","phone"]}}]},"put":{"summary":"Create Phone Session (confirmation)","operationId":"accountUpdatePhoneSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete creating a session with SMS. Use the **userId** from the [createPhoneSession](\/docs\/client\/account#accountCreatePhoneSession) endpoint and the **secret** received via SMS to successfully update and confirm the phone session.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updatePhoneSession","weight":15,"cookies":false,"type":"","demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":22,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":30,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":29,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":28,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":34,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":35,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":36,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":38,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":46,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":45,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabases","schema":{"$ref":"#\/definitions\/usageDatabases"}}},"x-appwrite":{"method":"getUsage","weight":79,"cookies":false,"type":"","demo":"databases\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":47,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":49,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":50,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":52,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":51,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":53,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":55,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":56,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":66,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":57,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":67,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":74,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":73,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":75,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":77,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":78,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}\/logs":{"get":{"summary":"List Document Logs","operationId":"databasesListDocumentLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the document activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listDocumentLogs","weight":76,"cookies":false,"type":"","demo":"databases\/list-document-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":70,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":69,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":71,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":72,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/logs":{"get":{"summary":"List Collection Logs","operationId":"databasesListCollectionLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the collection activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listCollectionLogs","weight":54,"cookies":false,"type":"","demo":"databases\/list-collection-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/usage":{"get":{"summary":"Get usage stats for a collection","operationId":"databasesGetCollectionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageCollection","schema":{"$ref":"#\/definitions\/usageCollection"}}},"x-appwrite":{"method":"getCollectionUsage","weight":81,"cookies":false,"type":"","demo":"databases\/get-collection-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/logs":{"get":{"summary":"List Database Logs","operationId":"databasesListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get the database activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":48,"cookies":false,"type":"","demo":"databases\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/databases\/{databaseId}\/usage":{"get":{"summary":"Get usage stats for the database","operationId":"databasesGetDatabaseUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"UsageDatabase","schema":{"$ref":"#\/definitions\/usageDatabase"}}},"x-appwrite":{"method":"getDatabaseUsage","weight":80,"cookies":false,"type":"","demo":"databases\/get-database-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"range","description":"`Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/usage":{"get":{"summary":"Get Functions Usage","operationId":"functionsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getUsage","weight":192,"cookies":false,"type":"","demo":"functions\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/usage":{"get":{"summary":"Get Function Usage","operationId":"functionsGetFunctionUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"","responses":{"200":{"description":"UsageFunctions","schema":{"$ref":"#\/definitions\/usageFunctions"}}},"x-appwrite":{"method":"getFunctionUsage","weight":191,"cookies":false,"type":"","demo":"functions\/get-function-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":89,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":99,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":92,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":91,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":94,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":98,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":93,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":82,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":86,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":83,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":87,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":88,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/projects":{"get":{"summary":"List Projects","operationId":"projectsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Projects List","schema":{"$ref":"#\/definitions\/projectList"}}},"x-appwrite":{"method":"list","weight":102,"cookies":false,"type":"","demo":"projects\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Project","operationId":"projectsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"create","weight":101,"cookies":false,"type":"","demo":"projects\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[PROJECT_ID]"},"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"teamId":{"type":"string","description":"Team unique ID.","default":null,"x-example":"[TEAM_ID]"},"region":{"type":"string","description":"Project Region.","default":null,"x-example":"default"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal Name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal Country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal State. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal City. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal Address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal Tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["projectId","name","teamId","region"]}}]}},"\/projects\/{projectId}":{"get":{"summary":"Get Project","operationId":"projectsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"get","weight":103,"cookies":false,"type":"","demo":"projects\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"patch":{"summary":"Update Project","operationId":"projectsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"update","weight":105,"cookies":false,"type":"","demo":"projects\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"description":{"type":"string","description":"Project description. Max length: 256 chars.","default":"","x-example":"[DESCRIPTION]"},"logo":{"type":"string","description":"Project logo.","default":"","x-example":"[LOGO]"},"url":{"type":"string","description":"Project URL.","default":"","x-example":"https:\/\/example.com"},"legalName":{"type":"string","description":"Project legal name. Max length: 256 chars.","default":"","x-example":"[LEGAL_NAME]"},"legalCountry":{"type":"string","description":"Project legal country. Max length: 256 chars.","default":"","x-example":"[LEGAL_COUNTRY]"},"legalState":{"type":"string","description":"Project legal state. Max length: 256 chars.","default":"","x-example":"[LEGAL_STATE]"},"legalCity":{"type":"string","description":"Project legal city. Max length: 256 chars.","default":"","x-example":"[LEGAL_CITY]"},"legalAddress":{"type":"string","description":"Project legal address. Max length: 256 chars.","default":"","x-example":"[LEGAL_ADDRESS]"},"legalTaxId":{"type":"string","description":"Project legal tax ID. Max length: 256 chars.","default":"","x-example":"[LEGAL_TAX_ID]"}},"required":["name"]}}]},"delete":{"summary":"Delete Project","operationId":"projectsDelete","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":111,"cookies":false,"type":"","demo":"projects\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"Your user password for confirmation. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/projects\/{projectId}\/auth\/duration":{"patch":{"summary":"Update Project Authentication Duration","operationId":"projectsUpdateAuthDuration","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthDuration","weight":109,"cookies":false,"type":"","demo":"projects\/update-auth-duration.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"duration":{"type":"integer","description":"Project session length in seconds. Max length: 31536000 seconds.","default":null,"x-example":0}},"required":["duration"]}}]}},"\/projects\/{projectId}\/auth\/limit":{"patch":{"summary":"Update Project users limit","operationId":"projectsUpdateAuthLimit","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthLimit","weight":108,"cookies":false,"type":"","demo":"projects\/update-auth-limit.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Set the max number of users allowed in this project. Use 0 for unlimited.","default":null,"x-example":0}},"required":["limit"]}}]}},"\/projects\/{projectId}\/auth\/{method}":{"patch":{"summary":"Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.","operationId":"projectsUpdateAuthStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateAuthStatus","weight":110,"cookies":false,"type":"","demo":"projects\/update-auth-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"method","description":"Auth Method. Possible values: email-password,magic-url,anonymous,invites,jwt,phone","required":true,"type":"string","x-example":"email-password","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"Set the status of this auth method.","default":null,"x-example":false}},"required":["status"]}}]}},"\/projects\/{projectId}\/domains":{"get":{"summary":"List Domains","operationId":"projectsListDomains","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domains List","schema":{"$ref":"#\/definitions\/domainList"}}},"x-appwrite":{"method":"listDomains","weight":129,"cookies":false,"type":"","demo":"projects\/list-domains.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Domain","operationId":"projectsCreateDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"createDomain","weight":128,"cookies":false,"type":"","demo":"projects\/create-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name.","default":null,"x-example":null}},"required":["domain"]}}]}},"\/projects\/{projectId}\/domains\/{domainId}":{"get":{"summary":"Get Domain","operationId":"projectsGetDomain","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"getDomain","weight":130,"cookies":false,"type":"","demo":"projects\/get-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]},"delete":{"summary":"Delete Domain","operationId":"projectsDeleteDomain","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDomain","weight":132,"cookies":false,"type":"","demo":"projects\/delete-domain.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/domains\/{domainId}\/verification":{"patch":{"summary":"Update Domain Verification Status","operationId":"projectsUpdateDomainVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Domain","schema":{"$ref":"#\/definitions\/domain"}}},"x-appwrite":{"method":"updateDomainVerification","weight":131,"cookies":false,"type":"","demo":"projects\/update-domain-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"domainId","description":"Domain unique ID.","required":true,"type":"string","x-example":"[DOMAIN_ID]","in":"path"}]}},"\/projects\/{projectId}\/keys":{"get":{"summary":"List Keys","operationId":"projectsListKeys","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"API Keys List","schema":{"$ref":"#\/definitions\/keyList"}}},"x-appwrite":{"method":"listKeys","weight":119,"cookies":false,"type":"","demo":"projects\/list-keys.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Key","operationId":"projectsCreateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"createKey","weight":118,"cookies":false,"type":"","demo":"projects\/create-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 scopes are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]}},"\/projects\/{projectId}\/keys\/{keyId}":{"get":{"summary":"Get Key","operationId":"projectsGetKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"getKey","weight":120,"cookies":false,"type":"","demo":"projects\/get-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]},"put":{"summary":"Update Key","operationId":"projectsUpdateKey","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Key","schema":{"$ref":"#\/definitions\/key"}}},"x-appwrite":{"method":"updateKey","weight":121,"cookies":false,"type":"","demo":"projects\/update-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Key name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"scopes":{"type":"array","description":"Key scopes list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"expire":{"type":"string","description":"Expiration time in ISO 8601 format. Use null for unlimited expiration.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["name","scopes"]}}]},"delete":{"summary":"Delete Key","operationId":"projectsDeleteKey","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteKey","weight":122,"cookies":false,"type":"","demo":"projects\/delete-key.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"keyId","description":"Key unique ID.","required":true,"type":"string","x-example":"[KEY_ID]","in":"path"}]}},"\/projects\/{projectId}\/oauth2":{"patch":{"summary":"Update Project OAuth2","operationId":"projectsUpdateOAuth2","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateOAuth2","weight":107,"cookies":false,"type":"","demo":"projects\/update-o-auth2.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider Name","default":null,"x-example":"amazon"},"appId":{"type":"string","description":"Provider app ID. Max length: 256 chars.","default":null,"x-example":"[APP_ID]"},"secret":{"type":"string","description":"Provider secret key. Max length: 512 chars.","default":null,"x-example":"[SECRET]"},"enabled":{"type":"boolean","description":"Provider status. Set to 'false' to disable new session creation.","default":null,"x-example":false}},"required":["provider"]}}]}},"\/projects\/{projectId}\/platforms":{"get":{"summary":"List Platforms","operationId":"projectsListPlatforms","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platforms List","schema":{"$ref":"#\/definitions\/platformList"}}},"x-appwrite":{"method":"listPlatforms","weight":124,"cookies":false,"type":"","demo":"projects\/list-platforms.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Platform","operationId":"projectsCreatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"createPlatform","weight":123,"cookies":false,"type":"","demo":"projects\/create-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"type":{"type":"string","description":"Platform type.","default":null,"x-example":"web"},"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client hostname. Max length: 256 chars.","default":"","x-example":null}},"required":["type","name"]}}]}},"\/projects\/{projectId}\/platforms\/{platformId}":{"get":{"summary":"Get Platform","operationId":"projectsGetPlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"getPlatform","weight":125,"cookies":false,"type":"","demo":"projects\/get-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]},"put":{"summary":"Update Platform","operationId":"projectsUpdatePlatform","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Platform","schema":{"$ref":"#\/definitions\/platform"}}},"x-appwrite":{"method":"updatePlatform","weight":126,"cookies":false,"type":"","demo":"projects\/update-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Platform name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"key":{"type":"string","description":"Package name for android or bundle ID for iOS. Max length: 256 chars.","default":"","x-example":"[KEY]"},"store":{"type":"string","description":"App store or Google Play store ID. Max length: 256 chars.","default":"","x-example":"[STORE]"},"hostname":{"type":"string","description":"Platform client URL. Max length: 256 chars.","default":"","x-example":null}},"required":["name"]}}]},"delete":{"summary":"Delete Platform","operationId":"projectsDeletePlatform","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deletePlatform","weight":127,"cookies":false,"type":"","demo":"projects\/delete-platform.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"platformId","description":"Platform unique ID.","required":true,"type":"string","x-example":"[PLATFORM_ID]","in":"path"}]}},"\/projects\/{projectId}\/service":{"patch":{"summary":"Update service status","operationId":"projectsUpdateServiceStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Project","schema":{"$ref":"#\/definitions\/project"}}},"x-appwrite":{"method":"updateServiceStatus","weight":106,"cookies":false,"type":"","demo":"projects\/update-service-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"service":{"type":"string","description":"Service name.","default":null,"x-example":"account"},"status":{"type":"boolean","description":"Service status.","default":null,"x-example":false}},"required":["service","status"]}}]}},"\/projects\/{projectId}\/usage":{"get":{"summary":"Get usage stats for a project","operationId":"projectsGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"UsageProject","schema":{"$ref":"#\/definitions\/usageProject"}}},"x-appwrite":{"method":"getUsage","weight":104,"cookies":false,"type":"","demo":"projects\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/projects\/{projectId}\/webhooks":{"get":{"summary":"List Webhooks","operationId":"projectsListWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhooks List","schema":{"$ref":"#\/definitions\/webhookList"}}},"x-appwrite":{"method":"listWebhooks","weight":113,"cookies":false,"type":"","demo":"projects\/list-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"}]},"post":{"summary":"Create Webhook","operationId":"projectsCreateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"201":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"createWebhook","weight":112,"cookies":false,"type":"","demo":"projects\/create-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}":{"get":{"summary":"Get Webhook","operationId":"projectsGetWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"getWebhook","weight":114,"cookies":false,"type":"","demo":"projects\/get-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]},"put":{"summary":"Update Webhook","operationId":"projectsUpdateWebhook","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhook","weight":115,"cookies":false,"type":"","demo":"projects\/update-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Webhook name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"Webhook URL.","default":null,"x-example":"https:\/\/example.com"},"security":{"type":"boolean","description":"Certificate verification, false for disabled or true for enabled.","default":null,"x-example":false},"httpUser":{"type":"string","description":"Webhook HTTP user. Max length: 256 chars.","default":"","x-example":"[HTTP_USER]"},"httpPass":{"type":"string","description":"Webhook HTTP password. Max length: 256 chars.","default":"","x-example":"[HTTP_PASS]"}},"required":["name","events","url","security"]}}]},"delete":{"summary":"Delete Webhook","operationId":"projectsDeleteWebhook","consumes":["application\/json"],"produces":[],"tags":["projects"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteWebhook","weight":117,"cookies":false,"type":"","demo":"projects\/delete-webhook.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/projects\/{projectId}\/webhooks\/{webhookId}\/signature":{"patch":{"summary":"Update Webhook Signature Key","operationId":"projectsUpdateWebhookSignature","consumes":["application\/json"],"produces":["application\/json"],"tags":["projects"],"description":"","responses":{"200":{"description":"Webhook","schema":{"$ref":"#\/definitions\/webhook"}}},"x-appwrite":{"method":"updateWebhookSignature","weight":116,"cookies":false,"type":"","demo":"projects\/update-webhook-signature.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"projects.write","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"projectId","description":"Project unique ID.","required":true,"type":"string","x-example":"[PROJECT_ID]","in":"path"},{"name":"webhookId","description":"Webhook unique ID.","required":true,"type":"string","x-example":"[WEBHOOK_ID]","in":"path"}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID. Choose your own unique ID or pass the string `ID.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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/usage":{"get":{"summary":"Get usage stats for storage","operationId":"storageGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"StorageUsage","schema":{"$ref":"#\/definitions\/usageStorage"}}},"x-appwrite":{"method":"getUsage","weight":146,"cookies":false,"type":"","demo":"storage\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/storage\/{bucketId}\/usage":{"get":{"summary":"Get usage stats for a storage bucket","operationId":"storageGetBucketUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"","responses":{"200":{"description":"UsageBuckets","schema":{"$ref":"#\/definitions\/usageBuckets"}}},"x-appwrite":{"method":"getBucketUsage","weight":147,"cookies":false,"type":"","demo":"storage\/get-bucket-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"bucketId","description":"Bucket ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/logs":{"get":{"summary":"List Team Logs","operationId":"teamsListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get the team activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":159,"cookies":false,"type":"","demo":"teams\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/usage":{"get":{"summary":"Get usage stats for the users API","operationId":"usersGetUsage","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"","responses":{"200":{"description":"UsageUsers","schema":{"$ref":"#\/definitions\/usageUsers"}}},"x-appwrite":{"method":"getUsage","weight":186,"cookies":false,"type":"","demo":"users\/get-usage.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["console"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"range","description":"Date range.","required":false,"type":"string","x-example":"24h","default":"30d","in":"query"},{"name":"provider","description":"Provider Name.","required":false,"type":"string","x-example":"email","default":"","in":"query"}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"projectList":{"description":"Projects List","type":"object","properties":{"total":{"type":"integer","description":"Total number of projects documents that matched your query.","x-example":5,"format":"int32"},"projects":{"type":"array","description":"List of projects.","items":{"type":"object","$ref":"#\/definitions\/project"},"x-example":""}},"required":["total","projects"]},"webhookList":{"description":"Webhooks List","type":"object","properties":{"total":{"type":"integer","description":"Total number of webhooks documents that matched your query.","x-example":5,"format":"int32"},"webhooks":{"type":"array","description":"List of webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":""}},"required":["total","webhooks"]},"keyList":{"description":"API Keys List","type":"object","properties":{"total":{"type":"integer","description":"Total number of keys documents that matched your query.","x-example":5,"format":"int32"},"keys":{"type":"array","description":"List of keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":""}},"required":["total","keys"]},"platformList":{"description":"Platforms List","type":"object","properties":{"total":{"type":"integer","description":"Total number of platforms documents that matched your query.","x-example":5,"format":"int32"},"platforms":{"type":"array","description":"List of platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":""}},"required":["total","platforms"]},"domainList":{"description":"Domains List","type":"object","properties":{"total":{"type":"integer","description":"Total number of domains documents that matched your query.","x-example":5,"format":"int32"},"domains":{"type":"array","description":"List of domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":""}},"required":["total","domains"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"project":{"description":"Project","type":"object","properties":{"$id":{"type":"string","description":"Project ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Project creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Project update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Project name.","x-example":"New Project"},"description":{"type":"string","description":"Project description.","x-example":"This is a new project."},"teamId":{"type":"string","description":"Project team ID.","x-example":"1592981250"},"logo":{"type":"string","description":"Project logo file ID.","x-example":"5f5c451b403cb"},"url":{"type":"string","description":"Project website URL.","x-example":"5f5c451b403cb"},"legalName":{"type":"string","description":"Company legal name.","x-example":"Company LTD."},"legalCountry":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format.","x-example":"US"},"legalState":{"type":"string","description":"State name.","x-example":"New York"},"legalCity":{"type":"string","description":"City name.","x-example":"New York City."},"legalAddress":{"type":"string","description":"Company Address.","x-example":"620 Eighth Avenue, New York, NY 10018"},"legalTaxId":{"type":"string","description":"Company Tax ID.","x-example":"131102020"},"authDuration":{"type":"integer","description":"Session duration in seconds.","x-example":60,"format":"int32"},"authLimit":{"type":"integer","description":"Max users allowed. 0 is unlimited.","x-example":100,"format":"int32"},"providers":{"type":"array","description":"List of Providers.","items":{"type":"object","$ref":"#\/definitions\/provider"},"x-example":{}},"platforms":{"type":"array","description":"List of Platforms.","items":{"type":"object","$ref":"#\/definitions\/platform"},"x-example":{}},"webhooks":{"type":"array","description":"List of Webhooks.","items":{"type":"object","$ref":"#\/definitions\/webhook"},"x-example":{}},"keys":{"type":"array","description":"List of API Keys.","items":{"type":"object","$ref":"#\/definitions\/key"},"x-example":{}},"domains":{"type":"array","description":"List of Domains.","items":{"type":"object","$ref":"#\/definitions\/domain"},"x-example":{}},"authEmailPassword":{"type":"boolean","description":"Email\/Password auth method status","x-example":true},"authUsersAuthMagicURL":{"type":"boolean","description":"Magic URL auth method status","x-example":true},"authAnonymous":{"type":"boolean","description":"Anonymous auth method status","x-example":true},"authInvites":{"type":"boolean","description":"Invites auth method status","x-example":true},"authJWT":{"type":"boolean","description":"JWT auth method status","x-example":true},"authPhone":{"type":"boolean","description":"Phone auth method status","x-example":true},"serviceStatusForAccount":{"type":"boolean","description":"Account service status","x-example":true},"serviceStatusForAvatars":{"type":"boolean","description":"Avatars service status","x-example":true},"serviceStatusForDatabases":{"type":"boolean","description":"Databases service status","x-example":true},"serviceStatusForLocale":{"type":"boolean","description":"Locale service status","x-example":true},"serviceStatusForHealth":{"type":"boolean","description":"Health service status","x-example":true},"serviceStatusForStorage":{"type":"boolean","description":"Storage service status","x-example":true},"serviceStatusForTeams":{"type":"boolean","description":"Teams service status","x-example":true},"serviceStatusForUsers":{"type":"boolean","description":"Users service status","x-example":true},"serviceStatusForFunctions":{"type":"boolean","description":"Functions service status","x-example":true}},"required":["$id","$createdAt","$updatedAt","name","description","teamId","logo","url","legalName","legalCountry","legalState","legalCity","legalAddress","legalTaxId","authDuration","authLimit","providers","platforms","webhooks","keys","domains","authEmailPassword","authUsersAuthMagicURL","authAnonymous","authInvites","authJWT","authPhone","serviceStatusForAccount","serviceStatusForAvatars","serviceStatusForDatabases","serviceStatusForLocale","serviceStatusForHealth","serviceStatusForStorage","serviceStatusForTeams","serviceStatusForUsers","serviceStatusForFunctions"]},"webhook":{"description":"Webhook","type":"object","properties":{"$id":{"type":"string","description":"Webhook ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Webhook creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Webhook update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Webhook name.","x-example":"My Webhook"},"url":{"type":"string","description":"Webhook URL endpoint.","x-example":"https:\/\/example.com\/webhook"},"events":{"type":"array","description":"Webhook trigger events.","items":{"type":"string"},"x-example":"database.collections.update"},"security":{"type":"boolean","description":"Indicated if SSL \/ TLS Certificate verification is enabled.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"},"signatureKey":{"type":"string","description":"Signature key which can be used to validated incoming","x-example":"ad3d581ca230e2b7059c545e5a"}},"required":["$id","$createdAt","$updatedAt","name","url","events","security","httpUser","httpPass","signatureKey"]},"key":{"description":"Key","type":"object","properties":{"$id":{"type":"string","description":"Key ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Key creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Key update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Key name.","x-example":"My API Key"},"expire":{"type":"string","description":"Key expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"scopes":{"type":"array","description":"Allowed permission scopes.","items":{"type":"string"},"x-example":"users.read"},"secret":{"type":"string","description":"Secret key.","x-example":"919c2d18fb5d4...a2ae413da83346ad2"},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"sdks":{"type":"array","description":"List of SDK user agents that used this key.","items":{"type":"string"},"x-example":"appwrite:flutter"}},"required":["$id","$createdAt","$updatedAt","name","expire","scopes","secret","accessedAt","sdks"]},"domain":{"description":"Domain","type":"object","properties":{"$id":{"type":"string","description":"Domain ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Domain creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Domain update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"domain":{"type":"string","description":"Domain name.","x-example":"appwrite.company.com"},"registerable":{"type":"string","description":"Registerable domain name.","x-example":"company.com"},"tld":{"type":"string","description":"TLD name.","x-example":"com"},"verification":{"type":"boolean","description":"Verification process status.","x-example":true},"certificateId":{"type":"string","description":"Certificate ID.","x-example":"6ejea5c13377e"}},"required":["$id","$createdAt","$updatedAt","domain","registerable","tld","verification","certificateId"]},"provider":{"description":"Provider","type":"object","properties":{"name":{"type":"string","description":"Provider name.","x-example":"GitHub"},"appId":{"type":"string","description":"OAuth 2.0 application ID.","x-example":"259125845563242502"},"secret":{"type":"string","description":"OAuth 2.0 application secret. Might be JSON string if provider requires extra configuration.","x-example":"Bpw_g9c2TGXxfgLshDbSaL8tsCcqgczQ"},"enabled":{"type":"boolean","description":"Provider is active and can be used to create session.","x-example":""}},"required":["name","appId","secret","enabled"]},"platform":{"description":"Platform","type":"object","properties":{"$id":{"type":"string","description":"Platform ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Platform creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Platform update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Platform name.","x-example":"My Web App"},"type":{"type":"string","description":"Platform type. Possible values are: web, flutter-ios, flutter-android, ios, android, and unity.","x-example":"My Web App"},"key":{"type":"string","description":"Platform Key. iOS bundle ID or Android package name. Empty string for other platforms.","x-example":"com.company.appname"},"store":{"type":"string","description":"App store or Google Play store ID.","x-example":""},"hostname":{"type":"string","description":"Web app hostname. Empty string for other platforms.","x-example":true},"httpUser":{"type":"string","description":"HTTP basic authentication username.","x-example":"username"},"httpPass":{"type":"string","description":"HTTP basic authentication password.","x-example":"password"}},"required":["$id","$createdAt","$updatedAt","name","type","key","store","hostname","httpUser","httpPass"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]},"metric":{"description":"Metric","type":"object","properties":{"value":{"type":"integer","description":"The value of this metric at the timestamp.","x-example":1,"format":"int32"},"date":{"type":"string","description":"The date at which this metric was aggregated in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["value","date"]},"usageDatabases":{"description":"UsageDatabases","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"databasesCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databasesDelete":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","databasesCount","documentsCount","collectionsCount","databasesCreate","databasesRead","databasesUpdate","databasesDelete","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageDatabase":{"description":"UsageDatabase","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCount":{"type":"array","description":"Aggregated stats for total number of collections.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsCreate":{"type":"array","description":"Aggregated stats for collections created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsRead":{"type":"array","description":"Aggregated stats for collections read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsUpdate":{"type":"array","description":"Aggregated stats for collections updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"collectionsDelete":{"type":"array","description":"Aggregated stats for collections delete.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","collectionsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete","collectionsCreate","collectionsRead","collectionsUpdate","collectionsDelete"]},"usageCollection":{"description":"UsageCollection","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"documentsCount":{"type":"array","description":"Aggregated stats for total number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsCreate":{"type":"array","description":"Aggregated stats for documents created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsRead":{"type":"array","description":"Aggregated stats for documents read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsUpdate":{"type":"array","description":"Aggregated stats for documents updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documentsDelete":{"type":"array","description":"Aggregated stats for documents deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","documentsCount","documentsCreate","documentsRead","documentsUpdate","documentsDelete"]},"usageUsers":{"description":"UsageUsers","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"usersCount":{"type":"array","description":"Aggregated stats for total number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersCreate":{"type":"array","description":"Aggregated stats for users created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersRead":{"type":"array","description":"Aggregated stats for users read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersUpdate":{"type":"array","description":"Aggregated stats for users updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"usersDelete":{"type":"array","description":"Aggregated stats for users deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsCreate":{"type":"array","description":"Aggregated stats for sessions created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsProviderCreate":{"type":"array","description":"Aggregated stats for sessions created for a provider ( email, anonymous or oauth2 ).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"sessionsDelete":{"type":"array","description":"Aggregated stats for sessions deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","usersCount","usersCreate","usersRead","usersUpdate","usersDelete","sessionsCreate","sessionsProviderCreate","sessionsDelete"]},"usageStorage":{"description":"StorageUsage","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCount":{"type":"array","description":"Aggregated stats for total number of files.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCount":{"type":"array","description":"Aggregated stats for total number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsCreate":{"type":"array","description":"Aggregated stats for buckets created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsRead":{"type":"array","description":"Aggregated stats for buckets read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsUpdate":{"type":"array","description":"Aggregated stats for buckets updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"bucketsDelete":{"type":"array","description":"Aggregated stats for buckets deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","storage","filesCount","bucketsCount","bucketsCreate","bucketsRead","bucketsUpdate","bucketsDelete","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageBuckets":{"description":"UsageBuckets","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"filesCount":{"type":"array","description":"Aggregated stats for total number of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesStorage":{"type":"array","description":"Aggregated stats for total storage of files in this bucket.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesCreate":{"type":"array","description":"Aggregated stats for files created.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesRead":{"type":"array","description":"Aggregated stats for files read.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesUpdate":{"type":"array","description":"Aggregated stats for files updated.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"filesDelete":{"type":"array","description":"Aggregated stats for files deleted.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","filesCount","filesStorage","filesCreate","filesRead","filesUpdate","filesDelete"]},"usageFunctions":{"description":"UsageFunctions","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"executionsTotal":{"type":"array","description":"Aggregated stats for number of function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsFailure":{"type":"array","description":"Aggregated stats for function execution failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsSuccess":{"type":"array","description":"Aggregated stats for function execution successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executionsTime":{"type":"array","description":"Aggregated stats for function execution duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTotal":{"type":"array","description":"Aggregated stats for number of function builds.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsFailure":{"type":"array","description":"Aggregated stats for function build failures.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsSuccess":{"type":"array","description":"Aggregated stats for function build successes.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buildsTime":{"type":"array","description":"Aggregated stats for function build duration.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","executionsTotal","executionsFailure","executionsSuccess","executionsTime","buildsTotal","buildsFailure","buildsSuccess","buildsTime"]},"usageProject":{"description":"UsageProject","type":"object","properties":{"range":{"type":"string","description":"The time range of the usage stats.","x-example":"30d"},"requests":{"type":"array","description":"Aggregated stats for number of requests.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"network":{"type":"array","description":"Aggregated stats for consumed bandwidth.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"executions":{"type":"array","description":"Aggregated stats for function executions.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"documents":{"type":"array","description":"Aggregated stats for number of documents.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"databases":{"type":"array","description":"Aggregated stats for number of databases.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"users":{"type":"array","description":"Aggregated stats for number of users.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"storage":{"type":"array","description":"Aggregated stats for the occupied storage size (in bytes).","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]},"buckets":{"type":"array","description":"Aggregated stats for number of buckets.","items":{"type":"object","$ref":"#\/definitions\/metric"},"x-example":[]}},"required":["range","requests","network","executions","documents","databases","users","storage","buckets"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index 70e1a5fd7..4bf56f9d3 100644 --- a/app/config/specs/swagger2-latest-server.json +++ b/app/config/specs/swagger2-latest-server.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":19,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":26,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":22,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":24,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":25,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":27,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":20,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":28,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":33,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":34,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":21,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":32,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":23,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":31,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":30,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":29,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":35,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":36,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":38,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":45,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":47,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":46,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":48,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":50,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":51,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":53,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":52,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":54,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":56,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":57,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":67,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":66,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":69,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":75,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":74,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":76,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":78,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":79,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":71,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":70,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":72,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":73,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":189,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":188,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":190,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":191,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":194,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":196,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":198,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":197,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":195,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":200,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":201,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":203,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":202,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":204,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":206,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":205,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":207,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":208,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":209,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":90,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":100,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":93,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":92,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":98,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":99,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":94,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":83,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":87,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":86,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":88,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":89,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":135,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":134,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":136,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":137,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":138,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":140,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":139,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID. Choose your own unique ID or pass the string `ID.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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":141,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":145,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":146,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":144,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":150,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":149,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":151,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":152,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":153,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":155,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":154,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":156,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":159,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":158,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":169,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":161,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":164,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":162,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":163,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":166,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":168,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":165,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":170,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":186,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":180,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":174,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":173,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":178,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":179,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":181,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":171,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":183,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":172,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":185,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":184,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":175,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":182,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":177,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file +{"swagger":"2.0","info":{"version":"1.1.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"host":"HOSTNAME","basePath":"\/v1","schemes":["https"],"consumes":["application\/json","multipart\/form-data"],"produces":["application\/json"],"securityDefinitions":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"Key":{"type":"apiKey","name":"X-Appwrite-Key","description":"Your secret API key","in":"header","x-appwrite":{"demo":"919c2d18fb5d4...a2ae413da83346ad2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header","x-appwrite":{"demo":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..."}},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}}},"paths":{"\/account":{"get":{"summary":"Get Account","operationId":"accountGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user data as JSON object.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"get","weight":18,"cookies":false,"type":"","demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/email":{"patch":{"summary":"Update Email","operationId":"accountUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateEmail","weight":25,"cookies":false,"type":"","demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["email","password"]}}]}},"\/account\/logs":{"get":{"summary":"List Logs","operationId":"accountListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of latest security activity logs. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":21,"cookies":false,"type":"","demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/account\/name":{"patch":{"summary":"Update Name","operationId":"accountUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateName","weight":23,"cookies":false,"type":"","demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/account\/password":{"patch":{"summary":"Update Password","operationId":"accountUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePassword","weight":24,"cookies":false,"type":"","demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","default":"","x-example":"password"}},"required":["password"]}}]}},"\/account\/phone":{"patch":{"summary":"Update Phone","operationId":"accountUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](\/docs\/client\/account#accountCreatePhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePhone","weight":26,"cookies":false,"type":"","demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["phone","password"]}}]}},"\/account\/prefs":{"get":{"summary":"Get Account Preferences","operationId":"accountGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user preferences as a key-value object.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":19,"cookies":false,"type":"","demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"patch":{"summary":"Update Preferences","operationId":"accountUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updatePrefs","weight":27,"cookies":false,"type":"","demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/account\/recovery":{"post":{"summary":"Create Password Recovery","operationId":"accountCreateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](\/docs\/client\/account#accountUpdateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createRecovery","weight":32,"cookies":false,"type":"","demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","ip:{ip}"],"scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["email","url"]}}]},"put":{"summary":"Create Password Recovery (confirmation)","operationId":"accountUpdateRecovery","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](\/docs\/client\/account#accountCreateRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateRecovery","weight":33,"cookies":false,"type":"","demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid reset token.","default":null,"x-example":"[SECRET]"},"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"},"passwordAgain":{"type":"string","description":"Repeat new user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["userId","secret","password","passwordAgain"]}}]}},"\/account\/sessions":{"get":{"summary":"List Sessions","operationId":"accountListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Get currently logged in user list of active sessions across different devices.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":20,"cookies":false,"type":"","demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"delete":{"summary":"Delete Sessions","operationId":"accountDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":31,"cookies":false,"type":"","demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get Session","operationId":"accountGetSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"getSession","weight":22,"cookies":false,"type":"","demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"patch":{"summary":"Update OAuth Session (Refresh Tokens)","operationId":"accountUpdateSession","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Access tokens have limited lifespan and expire to mitigate security risks. If session was created using an OAuth provider, this route can be used to \"refresh\" the access token.","responses":{"200":{"description":"Session","schema":{"$ref":"#\/definitions\/session"}}},"x-appwrite":{"method":"updateSession","weight":30,"cookies":false,"type":"","demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]},"delete":{"summary":"Delete Session","operationId":"accountDeleteSession","consumes":["application\/json"],"produces":[],"tags":["account"],"description":"Use this endpoint to log out the currently logged in user from all their account sessions across all of their different devices. When using the Session ID argument, only the unique session ID provided is deleted.\n","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":29,"cookies":false,"type":"","demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update Status","operationId":"accountUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"Account","schema":{"$ref":"#\/definitions\/account"}}},"x-appwrite":{"method":"updateStatus","weight":28,"cookies":false,"type":"","demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]}},"\/account\/verification":{"post":{"summary":"Create Email Verification","operationId":"accountCreateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdateEmailVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createVerification","weight":34,"cookies":false,"type":"","demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"}},"required":["url"]}}]},"put":{"summary":"Create Email Verification (confirmation)","operationId":"accountUpdateVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updateVerification","weight":35,"cookies":false,"type":"","demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/account\/verification\/phone":{"post":{"summary":"Create Phone Verification","operationId":"accountCreatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](\/docs\/client\/account#accountUpdatePhone) endpoint. Learn more about how to [complete the verification process](\/docs\/client\/account#accountUpdatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"createPhoneVerification","weight":36,"cookies":false,"type":"","demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}]},"put":{"summary":"Create Phone Verification (confirmation)","operationId":"accountUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","schema":{"$ref":"#\/definitions\/token"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":37,"cookies":false,"type":"","demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Valid verification token.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get Browser Icon","operationId":"avatarsGetBrowser","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](\/docs\/client\/account#accountGetSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getBrowser","weight":39,"cookies":false,"type":"location","demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"type":"string","x-example":"aa","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get Credit Card Icon","operationId":"avatarsGetCreditCard","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getCreditCard","weight":38,"cookies":false,"type":"location","demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"type":"string","x-example":"amex","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get Favicon","operationId":"avatarsGetFavicon","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFavicon","weight":42,"cookies":false,"type":"location","demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get Country Flag","operationId":"avatarsGetFlag","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFlag","weight":40,"cookies":false,"type":"location","demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"type":"string","x-example":"af","in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get Image from URL","operationId":"avatarsGetImage","consumes":["application\/json"],"produces":["image\/*"],"tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getImage","weight":41,"cookies":false,"type":"location","demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"type":"string","format":"url","x-example":"https:\/\/example.com","in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":0,"default":400,"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get User Initials","operationId":"avatarsGetInitials","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getInitials","weight":44,"cookies":false,"type":"location","demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"type":"string","x-example":"[NAME]","default":"","in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":500,"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"type":"string","default":"","in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR Code","operationId":"avatarsGetQR","consumes":["application\/json"],"produces":["image\/png"],"tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getQR","weight":43,"cookies":false,"type":"location","demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"type":"string","x-example":"[TEXT]","in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"type":"integer","format":"int32","x-example":1,"default":400,"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"type":"integer","format":"int32","x-example":0,"default":1,"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"type":"boolean","x-example":false,"default":false,"in":"query"}]}},"\/databases":{"get":{"summary":"List Databases","operationId":"databasesList","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.","responses":{"200":{"description":"Databases List","schema":{"$ref":"#\/definitions\/databaseList"}}},"x-appwrite":{"method":"list","weight":46,"cookies":false,"type":"","demo":"databases\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Database","operationId":"databasesCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Database.\n","responses":{"201":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"create","weight":45,"cookies":false,"type":"","demo":"databases\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"databaseId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DATABASE_ID]","x-global":true},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["databaseId","name"]}}]}},"\/databases\/{databaseId}":{"get":{"summary":"Get Database","operationId":"databasesGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"get","weight":47,"cookies":false,"type":"","demo":"databases\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]},"put":{"summary":"Update Database","operationId":"databasesUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a database by its unique ID.","responses":{"200":{"description":"Database","schema":{"$ref":"#\/definitions\/database"}}},"x-appwrite":{"method":"update","weight":49,"cookies":false,"type":"","demo":"databases\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Database","operationId":"databasesDelete","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":50,"cookies":false,"type":"","demo":"databases\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"databases.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections":{"get":{"summary":"List Collections","operationId":"databasesListCollections","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all collections that belong to the provided databaseId. You can use the search parameter to filter your results.","responses":{"200":{"description":"Collections List","schema":{"$ref":"#\/definitions\/collectionList"}}},"x-appwrite":{"method":"listCollections","weight":52,"cookies":false,"type":"","demo":"databases\/list-collections.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-collections.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, documentSecurity","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Collection","operationId":"databasesCreateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Collection. Before using this route, you should create a new database resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"createCollection","weight":51,"cookies":false,"type":"","demo":"databases\/create-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"collectionId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[COLLECTION_ID]"},"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permissions strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false}},"required":["collectionId","name"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}":{"get":{"summary":"Get Collection","operationId":"databasesGetCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a collection by its unique ID. This endpoint response returns a JSON object with the collection metadata.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"getCollection","weight":53,"cookies":false,"type":"","demo":"databases\/get-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"put":{"summary":"Update Collection","operationId":"databasesUpdateCollection","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a collection by its unique ID.","responses":{"200":{"description":"Collection","schema":{"$ref":"#\/definitions\/collection"}}},"x-appwrite":{"method":"updateCollection","weight":55,"cookies":false,"type":"","demo":"databases\/update-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Collection name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permission are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"documentSecurity":{"type":"boolean","description":"Enables configuring permissions for individual documents. A user needs one of document or collection level permissions to access a document. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is collection enabled?","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Collection","operationId":"databasesDeleteCollection","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a collection by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteCollection","weight":56,"cookies":false,"type":"","demo":"databases\/delete-collection.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-collection.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes":{"get":{"summary":"List Attributes","operationId":"databasesListAttributes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Attributes List","schema":{"$ref":"#\/definitions\/attributeList"}}},"x-appwrite":{"method":"listAttributes","weight":66,"cookies":false,"type":"","demo":"databases\/list-attributes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-attributes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/boolean":{"post":{"summary":"Create Boolean Attribute","operationId":"databasesCreateBooleanAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a boolean attribute.\n","responses":{"202":{"description":"AttributeBoolean","schema":{"$ref":"#\/definitions\/attributeBoolean"}}},"x-appwrite":{"method":"createBooleanAttribute","weight":64,"cookies":false,"type":"","demo":"databases\/create-boolean-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-boolean-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":false},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/datetime":{"post":{"summary":"Create DateTime Attribute","operationId":"databasesCreateDatetimeAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeDatetime","schema":{"$ref":"#\/definitions\/attributeDatetime"}}},"x-appwrite":{"method":"createDatetimeAttribute","weight":65,"cookies":false,"type":"","demo":"databases\/create-datetime-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-datetime-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for the attribute in ISO 8601 format. Cannot be set when attribute is required.","default":null,"x-example":"2020-10-15T06:38:00.000+00:00"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/email":{"post":{"summary":"Create Email Attribute","operationId":"databasesCreateEmailAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an email attribute.\n","responses":{"202":{"description":"AttributeEmail","schema":{"$ref":"#\/definitions\/attributeEmail"}}},"x-appwrite":{"method":"createEmailAttribute","weight":58,"cookies":false,"type":"","demo":"databases\/create-email-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-email-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"email@example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/enum":{"post":{"summary":"Create Enum Attribute","operationId":"databasesCreateEnumAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"AttributeEnum","schema":{"$ref":"#\/definitions\/attributeEnum"}}},"x-appwrite":{"method":"createEnumAttribute","weight":59,"cookies":false,"type":"","demo":"databases\/create-enum-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-attribute-enum.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"elements":{"type":"array","description":"Array of elements in enumerated type. Uses length of longest element to determine size. Maximum of 100 elements are allowed, each 4096 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","elements","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/float":{"post":{"summary":"Create Float Attribute","operationId":"databasesCreateFloatAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a float attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeFloat","schema":{"$ref":"#\/definitions\/attributeFloat"}}},"x-appwrite":{"method":"createFloatAttribute","weight":63,"cookies":false,"type":"","demo":"databases\/create-float-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-float-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"number","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"number","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/integer":{"post":{"summary":"Create Integer Attribute","operationId":"databasesCreateIntegerAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create an integer attribute. Optionally, minimum and maximum values can be provided.\n","responses":{"202":{"description":"AttributeInteger","schema":{"$ref":"#\/definitions\/attributeInteger"}}},"x-appwrite":{"method":"createIntegerAttribute","weight":62,"cookies":false,"type":"","demo":"databases\/create-integer-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-integer-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"min":{"type":"integer","description":"Minimum value to enforce on new documents","default":null,"x-example":null},"max":{"type":"integer","description":"Maximum value to enforce on new documents","default":null,"x-example":null},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/ip":{"post":{"summary":"Create IP Address Attribute","operationId":"databasesCreateIpAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create IP address attribute.\n","responses":{"202":{"description":"AttributeIP","schema":{"$ref":"#\/definitions\/attributeIp"}}},"x-appwrite":{"method":"createIpAttribute","weight":60,"cookies":false,"type":"","demo":"databases\/create-ip-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-ip-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":null},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/string":{"post":{"summary":"Create String Attribute","operationId":"databasesCreateStringAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a string attribute.\n","responses":{"202":{"description":"AttributeString","schema":{"$ref":"#\/definitions\/attributeString"}}},"x-appwrite":{"method":"createStringAttribute","weight":57,"cookies":false,"type":"","demo":"databases\/create-string-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-string-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"size":{"type":"integer","description":"Attribute size for text attributes, in number of characters.","default":null,"x-example":1},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"[DEFAULT]"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","size","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/url":{"post":{"summary":"Create URL Attribute","operationId":"databasesCreateUrlAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a URL attribute.\n","responses":{"202":{"description":"AttributeURL","schema":{"$ref":"#\/definitions\/attributeUrl"}}},"x-appwrite":{"method":"createUrlAttribute","weight":61,"cookies":false,"type":"","demo":"databases\/create-url-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-url-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","default":null,"x-example":null},"required":{"type":"boolean","description":"Is attribute required?","default":null,"x-example":false},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","default":null,"x-example":"https:\/\/example.com"},"array":{"type":"boolean","description":"Is attribute an array?","default":false,"x-example":false}},"required":["key","required"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/attributes\/{key}":{"get":{"summary":"Get Attribute","operationId":"databasesGetAttribute","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"AttributeDatetime, or AttributeBoolean, or AttributeInteger, or AttributeFloat, or AttributeEmail, or AttributeEnum, or AttributeURL, or AttributeIP, or AttributeDatetime, or AttributeString","schema":{"x-oneOf":[{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]}}},"x-appwrite":{"method":"getAttribute","weight":67,"cookies":false,"type":"","demo":"databases\/get-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Attribute","operationId":"databasesDeleteAttribute","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteAttribute","weight":68,"cookies":false,"type":"","demo":"databases\/delete-attribute.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-attribute.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Attribute Key.","required":true,"type":"string","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List Documents","operationId":"databasesListDocuments","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","schema":{"$ref":"#\/definitions\/documentList"}}},"x-appwrite":{"method":"listDocuments","weight":74,"cookies":false,"type":"","demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]},"post":{"summary":"Create Document","operationId":"databasesCreateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"createDocument","weight":73,"cookies":false,"type":"","demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[DOCUMENT_ID]"},"data":{"type":"object","description":"Document data as JSON object.","default":{},"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get Document","operationId":"databasesGetDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"getDocument","weight":75,"cookies":false,"type":"","demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]},"patch":{"summary":"Update Document","operationId":"databasesUpdateDocument","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","schema":{"$ref":"#\/definitions\/document"}}},"x-appwrite":{"method":"updateDocument","weight":77,"cookies":false,"type":"","demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","default":[],"x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete Document","operationId":"databasesDeleteDocument","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":78,"cookies":false,"type":"","demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"documentId","description":"Document ID.","required":true,"type":"string","x-example":"[DOCUMENT_ID]","in":"path"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes":{"get":{"summary":"List Indexes","operationId":"databasesListIndexes","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Indexes List","schema":{"$ref":"#\/definitions\/indexList"}}},"x-appwrite":{"method":"listIndexes","weight":70,"cookies":false,"type":"","demo":"databases\/list-indexes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-indexes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"}]},"post":{"summary":"Create Index","operationId":"databasesCreateIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"202":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"createIndex","weight":69,"cookies":false,"type":"","demo":"databases\/create-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Index Key.","default":null,"x-example":null},"type":{"type":"string","description":"Index type.","default":null,"x-example":"key"},"attributes":{"type":"array","description":"Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"orders":{"type":"array","description":"Array of index orders. Maximum of 100 orders are allowed.","default":[],"x-example":null,"items":{"type":"string"}}},"required":["key","type","attributes"]}}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/indexes\/{key}":{"get":{"summary":"Get Index","operationId":"databasesGetIndex","consumes":["application\/json"],"produces":["application\/json"],"tags":["databases"],"description":"","responses":{"200":{"description":"Index","schema":{"$ref":"#\/definitions\/index"}}},"x-appwrite":{"method":"getIndex","weight":71,"cookies":false,"type":"","demo":"databases\/get-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]},"delete":{"summary":"Delete Index","operationId":"databasesDeleteIndex","consumes":["application\/json"],"produces":[],"tags":["databases"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIndex","weight":72,"cookies":false,"type":"","demo":"databases\/delete-index.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-index.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"collections.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"x-global":true,"type":"string","x-example":"[DATABASE_ID]","in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"type":"string","x-example":"[COLLECTION_ID]","in":"path"},{"name":"key","description":"Index Key.","required":true,"type":"string","in":"path"}]}},"\/functions":{"get":{"summary":"List Functions","operationId":"functionsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's functions. You can use the query params to filter your results.","responses":{"200":{"description":"Functions List","schema":{"$ref":"#\/definitions\/functionList"}}},"x-appwrite":{"method":"list","weight":188,"cookies":false,"type":"","demo":"functions\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, enabled, runtime, deployment, schedule, scheduleNext, schedulePrevious, timeout","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Function","operationId":"functionsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function. You can pass a list of [permissions](\/docs\/permissions) to allow different project users or team with access to execute the function using the client API.","responses":{"201":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"create","weight":187,"cookies":false,"type":"","demo":"functions\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"functionId":{"type":"string","description":"Function ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[FUNCTION_ID]"},"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"runtime":{"type":"string","description":"Execution runtime.","default":null,"x-example":"node-14.5"},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Function maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["functionId","name","execute","runtime"]}}]}},"\/functions\/runtimes":{"get":{"summary":"List runtimes","operationId":"functionsListRuntimes","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all runtimes that are currently active on your instance.","responses":{"200":{"description":"Runtimes List","schema":{"$ref":"#\/definitions\/runtimeList"}}},"x-appwrite":{"method":"listRuntimes","weight":189,"cookies":false,"type":"","demo":"functions\/list-runtimes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-runtimes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/functions\/{functionId}":{"get":{"summary":"Get Function","operationId":"functionsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"get","weight":190,"cookies":false,"type":"","demo":"functions\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"put":{"summary":"Update Function","operationId":"functionsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update function by its unique ID.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"update","weight":193,"cookies":false,"type":"","demo":"functions\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"execute":{"type":"array","description":"An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 64 characters long.","default":null,"x-example":"[\"any\"]","items":{"type":"string"}},"events":{"type":"array","description":"Events list. Maximum of 100 events are allowed.","default":[],"x-example":null,"items":{"type":"string"}},"schedule":{"type":"string","description":"Schedule CRON syntax.","default":"","x-example":null},"timeout":{"type":"integer","description":"Maximum execution time in seconds.","default":15,"x-example":1},"enabled":{"type":"boolean","description":"Is function enabled?","default":true,"x-example":false}},"required":["name","execute"]}}]},"delete":{"summary":"Delete Function","operationId":"functionsDelete","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a function by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":195,"cookies":false,"type":"","demo":"functions\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-function.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments":{"get":{"summary":"List Deployments","operationId":"functionsListDeployments","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the project's code deployments. You can use the query params to filter your results.","responses":{"200":{"description":"Deployments List","schema":{"$ref":"#\/definitions\/deploymentList"}}},"x-appwrite":{"method":"listDeployments","weight":197,"cookies":false,"type":"","demo":"functions\/list-deployments.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-deployments.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: entrypoint, size, buildId, activate","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Deployment","operationId":"functionsCreateDeployment","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function code deployment. Use this endpoint to upload a new version of your code function. To execute your newly uploaded code, you'll need to update the function's deployment to use your new deployment UID.\n\nThis endpoint accepts a tar.gz file compressed with your code. Make sure to include any dependencies your code has within the compressed file. You can learn more about code packaging in the [Appwrite Cloud Functions tutorial](\/docs\/functions).\n\nUse the \"command\" param to set the entry point used to execute your code.","responses":{"202":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"createDeployment","weight":196,"cookies":false,"type":"","demo":"functions\/create-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":true,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"entrypoint","description":"Entrypoint File.","required":true,"type":"string","x-example":"[ENTRYPOINT]","in":"formData"},{"name":"code","description":"Gzip file with your code package. When used with the Appwrite CLI, pass the path to your code directory, and the CLI will automatically package your code. Use a path that is within the current directory.","required":true,"type":"file","in":"formData"},{"name":"activate","description":"Automatically activate the deployment when it is finished building.","required":true,"type":"boolean","x-example":false,"in":"formData"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}":{"get":{"summary":"Get Deployment","operationId":"functionsGetDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a code deployment by its unique ID.","responses":{"200":{"description":"Deployment","schema":{"$ref":"#\/definitions\/deployment"}}},"x-appwrite":{"method":"getDeployment","weight":198,"cookies":false,"type":"","demo":"functions\/get-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"patch":{"summary":"Update Function Deployment","operationId":"functionsUpdateDeployment","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update the function code deployment ID using the unique function ID. Use this endpoint to switch the code deployment that should be executed by the execution endpoint.","responses":{"200":{"description":"Function","schema":{"$ref":"#\/definitions\/function"}}},"x-appwrite":{"method":"updateDeployment","weight":194,"cookies":false,"type":"","demo":"functions\/update-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-function-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]},"delete":{"summary":"Delete Deployment","operationId":"functionsDeleteDeployment","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a code deployment by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDeployment","weight":199,"cookies":false,"type":"","demo":"functions\/delete-deployment.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-deployment.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"}]}},"\/functions\/{functionId}\/deployments\/{deploymentId}\/builds\/{buildId}":{"post":{"summary":"Create Build","operationId":"functionsCreateBuild","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"createBuild","weight":200,"cookies":false,"type":"","demo":"functions\/create-build.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-build.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"deploymentId","description":"Deployment ID.","required":true,"type":"string","x-example":"[DEPLOYMENT_ID]","in":"path"},{"name":"buildId","description":"Build unique ID.","required":true,"type":"string","x-example":"[BUILD_ID]","in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List Executions","operationId":"functionsListExecutions","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","schema":{"$ref":"#\/definitions\/executionList"}}},"x-appwrite":{"method":"listExecutions","weight":202,"cookies":false,"type":"","demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, statusCode, duration","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Execution","operationId":"functionsCreateExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"createExecution","weight":201,"cookies":false,"type":"","demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},userId:{userId}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"data":{"type":"string","description":"String of custom data to send to function.","default":"","x-example":"[DATA]"},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","default":false,"x-example":false}}}}]}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get Execution","operationId":"functionsGetExecution","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","schema":{"$ref":"#\/definitions\/execution"}}},"x-appwrite":{"method":"getExecution","weight":203,"cookies":false,"type":"","demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"type":"string","x-example":"[EXECUTION_ID]","in":"path"}]}},"\/functions\/{functionId}\/variables":{"get":{"summary":"List Variables","operationId":"functionsListVariables","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a list of all variables of a specific function.","responses":{"200":{"description":"Variables List","schema":{"$ref":"#\/definitions\/variableList"}}},"x-appwrite":{"method":"listVariables","weight":205,"cookies":false,"type":"","demo":"functions\/list-variables.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-variables.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"}]},"post":{"summary":"Create Variable","operationId":"functionsCreateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Create a new function variable. These variables can be accessed within function in the `env` object under the request variable.","responses":{"201":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"createVariable","weight":204,"cookies":false,"type":"","demo":"functions\/create-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key","value"]}}]}},"\/functions\/{functionId}\/variables\/{variableId}":{"get":{"summary":"Get Variable","operationId":"functionsGetVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Get a variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"getVariable","weight":206,"cookies":false,"type":"","demo":"functions\/get-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]},"put":{"summary":"Update Variable","operationId":"functionsUpdateVariable","consumes":["application\/json"],"produces":["application\/json"],"tags":["functions"],"description":"Update variable by its unique ID.","responses":{"200":{"description":"Variable","schema":{"$ref":"#\/definitions\/variable"}}},"x-appwrite":{"method":"updateVariable","weight":207,"cookies":false,"type":"","demo":"functions\/update-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/update-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Variable key. Max length: 255 chars.","default":null,"x-example":"[KEY]"},"value":{"type":"string","description":"Variable value. Max length: 8192 chars.","default":null,"x-example":"[VALUE]"}},"required":["key"]}}]},"delete":{"summary":"Delete Variable","operationId":"functionsDeleteVariable","consumes":["application\/json"],"produces":[],"tags":["functions"],"description":"Delete a variable by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteVariable","weight":208,"cookies":false,"type":"","demo":"functions\/delete-variable.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/delete-variable.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"functions.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"functionId","description":"Function unique ID.","required":true,"type":"string","x-example":"[FUNCTION_ID]","in":"path"},{"name":"variableId","description":"Variable unique ID.","required":true,"type":"string","x-example":"[VARIABLE_ID]","in":"path"}]}},"\/health":{"get":{"summary":"Get HTTP","operationId":"healthGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite HTTP server is up and responsive.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"get","weight":89,"cookies":false,"type":"","demo":"health\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/anti-virus":{"get":{"summary":"Get Antivirus","operationId":"healthGetAntivirus","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite Antivirus server is up and connection is successful.","responses":{"200":{"description":"Health Antivirus","schema":{"$ref":"#\/definitions\/healthAntivirus"}}},"x-appwrite":{"method":"getAntivirus","weight":99,"cookies":false,"type":"","demo":"health\/get-antivirus.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-anti-virus.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/cache":{"get":{"summary":"Get Cache","operationId":"healthGetCache","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite in-memory cache server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getCache","weight":92,"cookies":false,"type":"","demo":"health\/get-cache.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-cache.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/db":{"get":{"summary":"Get DB","operationId":"healthGetDB","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite database server is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getDB","weight":91,"cookies":false,"type":"","demo":"health\/get-d-b.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-db.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/certificates":{"get":{"summary":"Get Certificates Queue","operationId":"healthGetQueueCertificates","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of certificates that are waiting to be issued against [Letsencrypt](https:\/\/letsencrypt.org\/) in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueCertificates","weight":96,"cookies":false,"type":"","demo":"health\/get-queue-certificates.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-certificates.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/functions":{"get":{"summary":"Get Functions Queue","operationId":"healthGetQueueFunctions","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueFunctions","weight":97,"cookies":false,"type":"","demo":"health\/get-queue-functions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-functions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/logs":{"get":{"summary":"Get Logs Queue","operationId":"healthGetQueueLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of logs that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueLogs","weight":95,"cookies":false,"type":"","demo":"health\/get-queue-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/queue\/webhooks":{"get":{"summary":"Get Webhooks Queue","operationId":"healthGetQueueWebhooks","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Get the number of webhooks that are waiting to be processed in the Appwrite internal queue server.","responses":{"200":{"description":"Health Queue","schema":{"$ref":"#\/definitions\/healthQueue"}}},"x-appwrite":{"method":"getQueueWebhooks","weight":94,"cookies":false,"type":"","demo":"health\/get-queue-webhooks.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-webhooks.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/storage\/local":{"get":{"summary":"Get Local Storage","operationId":"healthGetStorageLocal","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite local storage device is up and connection is successful.","responses":{"200":{"description":"Health Status","schema":{"$ref":"#\/definitions\/healthStatus"}}},"x-appwrite":{"method":"getStorageLocal","weight":98,"cookies":false,"type":"","demo":"health\/get-storage-local.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-storage-local.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/health\/time":{"get":{"summary":"Get Time","operationId":"healthGetTime","consumes":["application\/json"],"produces":["application\/json"],"tags":["health"],"description":"Check the Appwrite server time is synced with Google remote NTP server. We use this technology to smoothly handle leap seconds with no disruptive events. The [Network Time Protocol](https:\/\/en.wikipedia.org\/wiki\/Network_Time_Protocol) (NTP) is used by hundreds of millions of computers and devices to synchronize their clocks over the Internet. If your computer sets its own clock, it likely uses NTP.","responses":{"200":{"description":"Health Time","schema":{"$ref":"#\/definitions\/healthTime"}}},"x-appwrite":{"method":"getTime","weight":93,"cookies":false,"type":"","demo":"health\/get-time.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-time.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"health.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}]}},"\/locale":{"get":{"summary":"Get User Locale","operationId":"localeGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","schema":{"$ref":"#\/definitions\/locale"}}},"x-appwrite":{"method":"get","weight":82,"cookies":false,"type":"","demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List Continents","operationId":"localeListContinents","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","schema":{"$ref":"#\/definitions\/continentList"}}},"x-appwrite":{"method":"listContinents","weight":86,"cookies":false,"type":"","demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List Countries","operationId":"localeListCountries","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountries","weight":83,"cookies":false,"type":"","demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU Countries","operationId":"localeListCountriesEU","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","schema":{"$ref":"#\/definitions\/countryList"}}},"x-appwrite":{"method":"listCountriesEU","weight":84,"cookies":false,"type":"","demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List Countries Phone Codes","operationId":"localeListCountriesPhones","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","schema":{"$ref":"#\/definitions\/phoneList"}}},"x-appwrite":{"method":"listCountriesPhones","weight":85,"cookies":false,"type":"","demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List Currencies","operationId":"localeListCurrencies","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","schema":{"$ref":"#\/definitions\/currencyList"}}},"x-appwrite":{"method":"listCurrencies","weight":87,"cookies":false,"type":"","demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List Languages","operationId":"localeListLanguages","consumes":["application\/json"],"produces":["application\/json"],"tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","schema":{"$ref":"#\/definitions\/languageList"}}},"x-appwrite":{"method":"listLanguages","weight":88,"cookies":false,"type":"","demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}]}},"\/storage\/buckets":{"get":{"summary":"List buckets","operationId":"storageListBuckets","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the storage buckets. You can use the query params to filter your results.","responses":{"200":{"description":"Buckets List","schema":{"$ref":"#\/definitions\/bucketList"}}},"x-appwrite":{"method":"listBuckets","weight":134,"cookies":false,"type":"","demo":"storage\/list-buckets.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-buckets.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: enabled, name, fileSecurity, maximumFileSize, encryption, antivirus","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create bucket","operationId":"storageCreateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new storage bucket.","responses":{"201":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"createBucket","weight":133,"cookies":false,"type":"","demo":"storage\/create-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"bucketId":{"type":"string","description":"Unique Id. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[BUCKET_ID]"},"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default no user is granted with any permissions. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":30000000,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["bucketId","name"]}}]}},"\/storage\/buckets\/{bucketId}":{"get":{"summary":"Get Bucket","operationId":"storageGetBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a storage bucket by its unique ID. This endpoint response returns a JSON object with the storage bucket metadata.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"getBucket","weight":135,"cookies":false,"type":"","demo":"storage\/get-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]},"put":{"summary":"Update Bucket","operationId":"storageUpdateBucket","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a storage bucket by its unique ID.","responses":{"200":{"description":"Bucket","schema":{"$ref":"#\/definitions\/bucket"}}},"x-appwrite":{"method":"updateBucket","weight":136,"cookies":false,"type":"","demo":"storage\/update-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Bucket name","default":null,"x-example":"[NAME]"},"permissions":{"type":"array","description":"An array of permission strings. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}},"fileSecurity":{"type":"boolean","description":"Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](\/docs\/permissions).","default":false,"x-example":false},"enabled":{"type":"boolean","description":"Is bucket enabled?","default":true,"x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size allowed in bytes. Maximum allowed value is 30MB. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](docs\/environment-variables#storage)","default":null,"x-example":1},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions. Maximum of 100 extensions are allowed, each 64 characters long.","default":[],"x-example":null,"items":{"type":"string"}},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled","default":"none","x-example":"none"},"encryption":{"type":"boolean","description":"Is encryption enabled? For file size above 20MB encryption is skipped even if it's enabled","default":true,"x-example":false},"antivirus":{"type":"boolean","description":"Is virus scanning enabled? For file size above 20MB AntiVirus scanning is skipped even if it's enabled","default":true,"x-example":false}},"required":["name"]}}]},"delete":{"summary":"Delete Bucket","operationId":"storageDeleteBucket","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a storage bucket by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteBucket","weight":137,"cookies":false,"type":"","demo":"storage\/delete-bucket.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-bucket.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"buckets.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"bucketId","description":"Bucket unique ID.","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List Files","operationId":"storageListFiles","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","schema":{"$ref":"#\/definitions\/fileList"}}},"x-appwrite":{"method":"listFiles","weight":139,"cookies":false,"type":"","demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create File","operationId":"storageCreateFile","consumes":["multipart\/form-data"],"produces":["application\/json"],"tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"createFile","weight":138,"cookies":false,"type":"upload","demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID. Choose your own unique ID or pass the string `ID.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.","required":true,"x-upload-id":true,"type":"string","x-example":"[FILE_ID]","in":"formData"},{"name":"file","description":"Binary file.","required":true,"type":"file","in":"formData"},{"name":"permissions","description":"An array of permission strings. By default the current user is granted with all permissions. [Learn more about permissions](\/docs\/permissions).","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"x-example":"[\"read(\"any\")\"]","in":"formData"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get File","operationId":"storageGetFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"getFile","weight":140,"cookies":false,"type":"","demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]},"put":{"summary":"Update File","operationId":"storageUpdateFile","consumes":["application\/json"],"produces":["application\/json"],"tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","schema":{"$ref":"#\/definitions\/file"}}},"x-appwrite":{"method":"updateFile","weight":144,"cookies":false,"type":"","demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"permissions":{"type":"array","description":"An array of permission string. By default the current permissions are inherited. [Learn more about permissions](\/docs\/permissions).","default":null,"x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}]},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","consumes":["application\/json"],"produces":[],"tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":145,"cookies":false,"type":"","demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get File for Download","operationId":"storageGetFileDownload","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileDownload","weight":142,"cookies":false,"type":"location","demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get File Preview","operationId":"storageGetFilePreview","consumes":["application\/json"],"produces":["image\/*"],"tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image","schema":{"type":"file"}}},"x-appwrite":{"method":"getFilePreview","weight":141,"cookies":false,"type":"location","demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"type":"string","x-example":"center","default":"center","in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"type":"integer","format":"int32","x-example":0,"default":100,"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"type":"integer","format":"int32","x-example":0,"default":0,"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"type":"number","format":"float","x-example":0,"default":1,"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"type":"integer","format":"int32","x-example":-360,"default":0,"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"type":"string","default":"","in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"type":"string","x-example":"jpg","default":"","in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get File for View","operationId":"storageGetFileView","consumes":["application\/json"],"produces":["*\/*"],"tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File","schema":{"type":"file"}}},"x-appwrite":{"method":"getFileView","weight":143,"cookies":false,"type":"location","demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](\/docs\/server\/storage#createBucket).","required":true,"type":"string","x-example":"[BUCKET_ID]","in":"path"},{"name":"fileId","description":"File ID.","required":true,"type":"string","x-example":"[FILE_ID]","in":"path"}]}},"\/teams":{"get":{"summary":"List Teams","operationId":"teamsList","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","schema":{"$ref":"#\/definitions\/teamList"}}},"x-appwrite":{"method":"list","weight":149,"cookies":false,"type":"","demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team","operationId":"teamsCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"create","weight":148,"cookies":false,"type":"","demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[TEAM_ID]"},"name":{"type":"string","description":"Team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":["owner"],"x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}]}},"\/teams\/{teamId}":{"get":{"summary":"Get Team","operationId":"teamsGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"get","weight":150,"cookies":false,"type":"","demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]},"put":{"summary":"Update Team","operationId":"teamsUpdate","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Update a team using its ID. Only members with the owner role can update the team.","responses":{"200":{"description":"Team","schema":{"$ref":"#\/definitions\/team"}}},"x-appwrite":{"method":"update","weight":151,"cookies":false,"type":"","demo":"teams\/update.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]},"delete":{"summary":"Delete Team","operationId":"teamsDelete","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":152,"cookies":false,"type":"","demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List Team Memberships","operationId":"teamsListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":154,"cookies":false,"type":"","demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create Team Membership","operationId":"teamsCreateMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Invite a new member to join your team. If initiated from the client SDK, an email with a link to join the team will be sent to the member's email address and an account will be created for them should they not be signed up already. If initiated from server-side SDKs, the new member will automatically be added to the team.\n\nUse the 'url' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](\/docs\/client\/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when adding your platforms in the console interface.","responses":{"201":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"createMembership","weight":153,"cookies":false,"type":"","demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","default":null,"x-example":"email@example.com"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","default":null,"x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["email","roles","url"]}}]}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get Team Membership","operationId":"teamsGetMembership","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"getMembership","weight":155,"cookies":false,"type":"","demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]},"patch":{"summary":"Update Membership Roles","operationId":"teamsUpdateMembershipRoles","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](\/docs\/permissions).","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipRoles","weight":156,"cookies":false,"type":"","demo":"teams\/update-membership-roles.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-roles.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","default":null,"x-example":null,"items":{"type":"string"}}},"required":["roles"]}}]},"delete":{"summary":"Delete Team Membership","operationId":"teamsDeleteMembership","consumes":["application\/json"],"produces":[],"tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":158,"cookies":false,"type":"","demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update Team Membership Status","operationId":"teamsUpdateMembershipStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","schema":{"$ref":"#\/definitions\/membership"}}},"x-appwrite":{"method":"updateMembershipStatus","weight":157,"cookies":false,"type":"","demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"auth":{"Project":[],"JWT":[]}},"security":[{"Project":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"type":"string","x-example":"[TEAM_ID]","in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"type":"string","x-example":"[MEMBERSHIP_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","default":null,"x-example":"[USER_ID]"},"secret":{"type":"string","description":"Secret key.","default":null,"x-example":"[SECRET]"}},"required":["userId","secret"]}}]}},"\/users":{"get":{"summary":"List Users","operationId":"usersList","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a list of all the project's users. You can use the query params to filter your results.","responses":{"200":{"description":"Users List","schema":{"$ref":"#\/definitions\/userList"}}},"x-appwrite":{"method":"list","weight":168,"cookies":false,"type":"","demo":"users\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-users.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, email, phone, status, passwordUpdate, registration, emailVerification, phoneVerification","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"type":"string","x-example":"[SEARCH]","default":"","in":"query"}]},"post":{"summary":"Create User","operationId":"usersCreate","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"create","weight":160,"cookies":false,"type":"","demo":"users\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","default":null,"x-example":"+12065550100"},"password":{"type":"string","description":"Plain text user password. Must be at least 8 chars.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId"]}}]}},"\/users\/argon2":{"post":{"summary":"Create User with Argon2 Password","operationId":"usersCreateArgon2User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Argon2](https:\/\/en.wikipedia.org\/wiki\/Argon2) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createArgon2User","weight":163,"cookies":false,"type":"","demo":"users\/create-argon2user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-argon2-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Argon2.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/bcrypt":{"post":{"summary":"Create User with Bcrypt Password","operationId":"usersCreateBcryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Bcrypt](https:\/\/en.wikipedia.org\/wiki\/Bcrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createBcryptUser","weight":161,"cookies":false,"type":"","demo":"users\/create-bcrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-bcrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Bcrypt.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/md5":{"post":{"summary":"Create User with MD5 Password","operationId":"usersCreateMD5User","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [MD5](https:\/\/en.wikipedia.org\/wiki\/MD5) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createMD5User","weight":162,"cookies":false,"type":"","demo":"users\/create-m-d5user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-md5-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using MD5.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/phpass":{"post":{"summary":"Create User with PHPass Password","operationId":"usersCreatePHPassUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [PHPass](https:\/\/www.openwall.com\/phpass\/) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createPHPassUser","weight":165,"cookies":false,"type":"","demo":"users\/create-p-h-pass-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-phpass-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using PHPass.","default":null,"x-example":"password"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/scrypt":{"post":{"summary":"Create User with Scrypt Password","operationId":"usersCreateScryptUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt](https:\/\/github.com\/Tarsnap\/scrypt) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptUser","weight":166,"cookies":false,"type":"","demo":"users\/create-scrypt-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Optional salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordCpu":{"type":"integer","description":"Optional CPU cost used to hash password.","default":null,"x-example":null},"passwordMemory":{"type":"integer","description":"Optional memory cost used to hash password.","default":null,"x-example":null},"passwordParallel":{"type":"integer","description":"Optional parallelization cost used to hash password.","default":null,"x-example":null},"passwordLength":{"type":"integer","description":"Optional hash length used to hash password.","default":null,"x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordCpu","passwordMemory","passwordParallel","passwordLength"]}}]}},"\/users\/scrypt-modified":{"post":{"summary":"Create User with Scrypt Modified Password","operationId":"usersCreateScryptModifiedUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [Scrypt Modified](https:\/\/gist.github.com\/Meldiron\/eecf84a0225eccb5a378d45bb27462cc) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createScryptModifiedUser","weight":167,"cookies":false,"type":"","demo":"users\/create-scrypt-modified-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-scrypt-modified-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using Scrypt Modified.","default":null,"x-example":"password"},"passwordSalt":{"type":"string","description":"Salt used to hash password.","default":null,"x-example":"[PASSWORD_SALT]"},"passwordSaltSeparator":{"type":"string","description":"Salt separator used to hash password.","default":null,"x-example":"[PASSWORD_SALT_SEPARATOR]"},"passwordSignerKey":{"type":"string","description":"Signer key used to hash password.","default":null,"x-example":"[PASSWORD_SIGNER_KEY]"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password","passwordSalt","passwordSaltSeparator","passwordSignerKey"]}}]}},"\/users\/sha":{"post":{"summary":"Create User with SHA Password","operationId":"usersCreateSHAUser","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Create a new user. Password provided must be hashed with the [SHA](https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithm) algorithm. Use the [POST \/users](\/docs\/server\/users#usersCreate) endpoint to create users with a plain text password.","responses":{"201":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"createSHAUser","weight":164,"cookies":false,"type":"","demo":"users\/create-s-h-a-user.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/create-sha-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"payload","in":"body","schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose your own unique ID or pass the string `ID.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.","default":null,"x-example":"[USER_ID]"},"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"},"password":{"type":"string","description":"User password hashed using SHA.","default":null,"x-example":"password"},"passwordVersion":{"type":"string","description":"Optional SHA version used to hash password. Allowed values are: 'sha1', 'sha224', 'sha256', 'sha384', 'sha512\/224', 'sha512\/256', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'","default":"","x-example":"sha1"},"name":{"type":"string","description":"User name. Max length: 128 chars.","default":"","x-example":"[NAME]"}},"required":["userId","email","password"]}}]}},"\/users\/{userId}":{"get":{"summary":"Get User","operationId":"usersGet","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get a user by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"get","weight":169,"cookies":false,"type":"","demo":"users\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User","operationId":"usersDelete","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user by its unique ID, thereby releasing it's ID. Since ID is released and can be reused, all user-related resources like documents or storage files should be deleted before user deletion. If you want to keep ID reserved, use the [updateStatus](\/docs\/server\/users#usersUpdateStatus) endpoint instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":185,"cookies":false,"type":"","demo":"users\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/email":{"patch":{"summary":"Update Email","operationId":"usersUpdateEmail","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmail","weight":179,"cookies":false,"type":"","demo":"users\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","default":null,"x-example":"email@example.com"}},"required":["email"]}}]}},"\/users\/{userId}\/logs":{"get":{"summary":"List User Logs","operationId":"usersListLogs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user activity logs list by its unique ID.","responses":{"200":{"description":"Logs List","schema":{"$ref":"#\/definitions\/logList"}}},"x-appwrite":{"method":"listLogs","weight":173,"cookies":false,"type":"","demo":"users\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/databases#querying-documents). Only supported methods are limit and offset","required":false,"type":"array","collectionFormat":"multi","items":{"type":"string"},"default":[],"in":"query"}]}},"\/users\/{userId}\/memberships":{"get":{"summary":"List User Memberships","operationId":"usersListMemberships","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user membership list by its unique ID.","responses":{"200":{"description":"Memberships List","schema":{"$ref":"#\/definitions\/membershipList"}}},"x-appwrite":{"method":"listMemberships","weight":172,"cookies":false,"type":"","demo":"users\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-memberships.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/name":{"patch":{"summary":"Update Name","operationId":"usersUpdateName","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user name by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateName","weight":177,"cookies":false,"type":"","demo":"users\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","default":null,"x-example":"[NAME]"}},"required":["name"]}}]}},"\/users\/{userId}\/password":{"patch":{"summary":"Update Password","operationId":"usersUpdatePassword","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user password by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePassword","weight":178,"cookies":false,"type":"","demo":"users\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","default":null,"x-example":"password"}},"required":["password"]}}]}},"\/users\/{userId}\/phone":{"patch":{"summary":"Update Phone","operationId":"usersUpdatePhone","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhone","weight":180,"cookies":false,"type":"","demo":"users\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"number":{"type":"string","description":"User phone number.","default":null,"x-example":"+12065550100"}},"required":["number"]}}]}},"\/users\/{userId}\/prefs":{"get":{"summary":"Get User Preferences","operationId":"usersGetPrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user preferences by its unique ID.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"getPrefs","weight":170,"cookies":false,"type":"","demo":"users\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/get-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"patch":{"summary":"Update User Preferences","operationId":"usersUpdatePrefs","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user preferences by its unique ID. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"Preferences","schema":{"$ref":"#\/definitions\/preferences"}}},"x-appwrite":{"method":"updatePrefs","weight":182,"cookies":false,"type":"","demo":"users\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","default":{},"x-example":"{}"}},"required":["prefs"]}}]}},"\/users\/{userId}\/sessions":{"get":{"summary":"List User Sessions","operationId":"usersListSessions","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Get the user sessions list by its unique ID.","responses":{"200":{"description":"Sessions List","schema":{"$ref":"#\/definitions\/sessionList"}}},"x-appwrite":{"method":"listSessions","weight":171,"cookies":false,"type":"","demo":"users\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/list-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.read","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]},"delete":{"summary":"Delete User Sessions","operationId":"usersDeleteSessions","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete all user's sessions by using the user's unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":184,"cookies":false,"type":"","demo":"users\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"}]}},"\/users\/{userId}\/sessions\/{sessionId}":{"delete":{"summary":"Delete User Session","operationId":"usersDeleteSession","consumes":["application\/json"],"produces":[],"tags":["users"],"description":"Delete a user sessions by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":183,"cookies":false,"type":"","demo":"users\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/delete-user-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"sessionId","description":"Session ID.","required":true,"type":"string","x-example":"[SESSION_ID]","in":"path"}]}},"\/users\/{userId}\/status":{"patch":{"summary":"Update User Status","operationId":"usersUpdateStatus","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user status by its unique ID. Use this endpoint as an alternative to deleting a user if you want to keep user's ID reserved.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateStatus","weight":174,"cookies":false,"type":"","demo":"users\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"status":{"type":"boolean","description":"User Status. To activate the user pass `true` and to block the user pass `false`.","default":null,"x-example":false}},"required":["status"]}}]}},"\/users\/{userId}\/verification":{"patch":{"summary":"Update Email Verification","operationId":"usersUpdateEmailVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user email verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updateEmailVerification","weight":181,"cookies":false,"type":"","demo":"users\/update-email-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-email-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"emailVerification":{"type":"boolean","description":"User email verification status.","default":null,"x-example":false}},"required":["emailVerification"]}}]}},"\/users\/{userId}\/verification\/phone":{"patch":{"summary":"Update Phone Verification","operationId":"usersUpdatePhoneVerification","consumes":["application\/json"],"produces":["application\/json"],"tags":["users"],"description":"Update the user phone verification status by its unique ID.","responses":{"200":{"description":"User","schema":{"$ref":"#\/definitions\/user"}}},"x-appwrite":{"method":"updatePhoneVerification","weight":176,"cookies":false,"type":"","demo":"users\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/users\/update-user-phone-verification.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"users.write","platforms":["server"],"packaging":false,"auth":{"Project":[],"Key":[]}},"security":[{"Project":[],"Key":[]}],"parameters":[{"name":"userId","description":"User ID.","required":true,"type":"string","x-example":"[USER_ID]","in":"path"},{"name":"payload","in":"body","schema":{"type":"object","properties":{"phoneVerification":{"type":"boolean","description":"User phone verification status.","default":null,"x-example":false}},"required":["phoneVerification"]}}]}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]}],"definitions":{"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"type":"object","$ref":"#\/definitions\/document"},"x-example":""}},"required":["total","documents"]},"collectionList":{"description":"Collections List","type":"object","properties":{"total":{"type":"integer","description":"Total number of collections documents that matched your query.","x-example":5,"format":"int32"},"collections":{"type":"array","description":"List of collections.","items":{"type":"object","$ref":"#\/definitions\/collection"},"x-example":""}},"required":["total","collections"]},"databaseList":{"description":"Databases List","type":"object","properties":{"total":{"type":"integer","description":"Total number of databases documents that matched your query.","x-example":5,"format":"int32"},"databases":{"type":"array","description":"List of databases.","items":{"type":"object","$ref":"#\/definitions\/database"},"x-example":""}},"required":["total","databases"]},"indexList":{"description":"Indexes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of indexes documents that matched your query.","x-example":5,"format":"int32"},"indexes":{"type":"array","description":"List of indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":""}},"required":["total","indexes"]},"userList":{"description":"Users List","type":"object","properties":{"total":{"type":"integer","description":"Total number of users documents that matched your query.","x-example":5,"format":"int32"},"users":{"type":"array","description":"List of users.","items":{"type":"object","$ref":"#\/definitions\/user"},"x-example":""}},"required":["total","users"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"type":"object","$ref":"#\/definitions\/session"},"x-example":""}},"required":["total","sessions"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"type":"object","$ref":"#\/definitions\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"type":"object","$ref":"#\/definitions\/file"},"x-example":""}},"required":["total","files"]},"bucketList":{"description":"Buckets List","type":"object","properties":{"total":{"type":"integer","description":"Total number of buckets documents that matched your query.","x-example":5,"format":"int32"},"buckets":{"type":"array","description":"List of buckets.","items":{"type":"object","$ref":"#\/definitions\/bucket"},"x-example":""}},"required":["total","buckets"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"type":"object","$ref":"#\/definitions\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"type":"object","$ref":"#\/definitions\/membership"},"x-example":""}},"required":["total","memberships"]},"functionList":{"description":"Functions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of functions documents that matched your query.","x-example":5,"format":"int32"},"functions":{"type":"array","description":"List of functions.","items":{"type":"object","$ref":"#\/definitions\/function"},"x-example":""}},"required":["total","functions"]},"runtimeList":{"description":"Runtimes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of runtimes documents that matched your query.","x-example":5,"format":"int32"},"runtimes":{"type":"array","description":"List of runtimes.","items":{"type":"object","$ref":"#\/definitions\/runtime"},"x-example":""}},"required":["total","runtimes"]},"deploymentList":{"description":"Deployments List","type":"object","properties":{"total":{"type":"integer","description":"Total number of deployments documents that matched your query.","x-example":5,"format":"int32"},"deployments":{"type":"array","description":"List of deployments.","items":{"type":"object","$ref":"#\/definitions\/deployment"},"x-example":""}},"required":["total","deployments"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"type":"object","$ref":"#\/definitions\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"type":"object","$ref":"#\/definitions\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"type":"object","$ref":"#\/definitions\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"type":"object","$ref":"#\/definitions\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"type":"object","$ref":"#\/definitions\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"type":"object","$ref":"#\/definitions\/phone"},"x-example":""}},"required":["total","phones"]},"variableList":{"description":"Variables List","type":"object","properties":{"total":{"type":"integer","description":"Total number of variables documents that matched your query.","x-example":5,"format":"int32"},"variables":{"type":"array","description":"List of variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":""}},"required":["total","variables"]},"database":{"description":"Database","type":"object","properties":{"$id":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Database name.","x-example":"My Database"},"$createdAt":{"type":"string","description":"Database creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Database update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","name","$createdAt","$updatedAt"]},"collection":{"description":"Collection","type":"object","properties":{"$id":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Collection creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Collection update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Collection permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c16897e"},"name":{"type":"string","description":"Collection name.","x-example":"My Collection"},"enabled":{"type":"boolean","description":"Collection enabled.","x-example":false},"documentSecurity":{"type":"boolean","description":"Whether document-level permissions are enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"attributes":{"type":"array","description":"Collection attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":{}},"indexes":{"type":"array","description":"Collection indexes.","items":{"type":"object","$ref":"#\/definitions\/index"},"x-example":{}}},"required":["$id","$createdAt","$updatedAt","$permissions","databaseId","name","enabled","documentSecurity","attributes","indexes"]},"attributeList":{"description":"Attributes List","type":"object","properties":{"total":{"type":"integer","description":"Total number of attributes in the given collection.","x-example":5,"format":"int32"},"attributes":{"type":"array","description":"List of attributes.","items":{"x-anyOf":[{"$ref":"#\/definitions\/attributeBoolean"},{"$ref":"#\/definitions\/attributeInteger"},{"$ref":"#\/definitions\/attributeFloat"},{"$ref":"#\/definitions\/attributeEmail"},{"$ref":"#\/definitions\/attributeEnum"},{"$ref":"#\/definitions\/attributeUrl"},{"$ref":"#\/definitions\/attributeIp"},{"$ref":"#\/definitions\/attributeDatetime"},{"$ref":"#\/definitions\/attributeString"}]},"x-example":""}},"required":["total","attributes"]},"attributeString":{"description":"AttributeString","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"fullName"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"size":{"type":"integer","description":"Attribute size.","x-example":128,"format":"int32"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default","x-nullable":true}},"required":["key","type","status","required","size"]},"attributeInteger":{"description":"AttributeInteger","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"count"},"type":{"type":"string","description":"Attribute type.","x-example":"integer"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"integer","description":"Minimum value to enforce for new documents.","x-example":1,"format":"int32","x-nullable":true},"max":{"type":"integer","description":"Maximum value to enforce for new documents.","x-example":10,"format":"int32","x-nullable":true},"default":{"type":"integer","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":10,"format":"int32","x-nullable":true}},"required":["key","type","status","required"]},"attributeFloat":{"description":"AttributeFloat","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"percentageCompleted"},"type":{"type":"string","description":"Attribute type.","x-example":"double"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"min":{"type":"number","description":"Minimum value to enforce for new documents.","x-example":1.5,"format":"double","x-nullable":true},"max":{"type":"number","description":"Maximum value to enforce for new documents.","x-example":10.5,"format":"double","x-nullable":true},"default":{"type":"number","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":2.5,"format":"double","x-nullable":true}},"required":["key","type","status","required"]},"attributeBoolean":{"description":"AttributeBoolean","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"isEnabled"},"type":{"type":"string","description":"Attribute type.","x-example":"boolean"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"default":{"type":"boolean","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":false,"x-nullable":true}},"required":["key","type","status","required"]},"attributeEmail":{"description":"AttributeEmail","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"userEmail"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"email"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"default@example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeEnum":{"description":"AttributeEnum","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"status"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"elements":{"type":"array","description":"Array of elements in enumerated type.","items":{"type":"string"},"x-example":"element"},"format":{"type":"string","description":"String format.","x-example":"enum"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"element","x-nullable":true}},"required":["key","type","status","required","elements","format"]},"attributeIp":{"description":"AttributeIP","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"ipAddress"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"ip"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"192.0.2.0","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeUrl":{"description":"AttributeURL","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"githubUrl"},"type":{"type":"string","description":"Attribute type.","x-example":"string"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"String format.","x-example":"url"},"default":{"type":"string","description":"Default value for attribute when not provided. Cannot be set when attribute is required.","x-example":"http:\/\/example.com","x-nullable":true}},"required":["key","type","status","required","format"]},"attributeDatetime":{"description":"AttributeDatetime","type":"object","properties":{"key":{"type":"string","description":"Attribute Key.","x-example":"birthDay"},"type":{"type":"string","description":"Attribute type.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"string","description":"Attribute status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"required":{"type":"boolean","description":"Is attribute required?","x-example":true},"array":{"type":"boolean","description":"Is attribute an array?","x-example":false,"x-nullable":true},"format":{"type":"string","description":"ISO 8601 format.","x-example":"datetime"},"default":{"type":"string","description":"Default value for attribute when not provided. Only null is optional","x-example":"2020-10-15T06:38:00.000+00:00","x-nullable":true}},"required":["key","type","status","required","format"]},"index":{"description":"Index","type":"object","properties":{"key":{"type":"string","description":"Index Key.","x-example":"index1"},"type":{"type":"string","description":"Index type.","x-example":"primary"},"status":{"type":"string","description":"Index status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`","x-example":"available"},"attributes":{"type":"array","description":"Index attributes.","items":{"type":"string"},"x-example":[]},"orders":{"type":"array","description":"Index orders.","items":{"type":"string"},"x-example":[],"x-nullable":true}},"required":["key","type","status","attributes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE"},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2"},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"x-oneOf":[{"$ref":"#\/definitions\/algoArgon2"},{"$ref":"#\/definitions\/algoScrypt"},{"$ref":"#\/definitions\/algoScryptModified"},{"$ref":"#\/definitions\/algoBcrypt"},{"$ref":"#\/definitions\/algoPhpass"},{"$ref":"#\/definitions\/algoSha"},{"$ref":"#\/definitions\/algoMd5"}]}},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","password","hash","hashOptions","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"algoMd5":{"description":"AlgoMD5","type":"object"},"algoSha":{"description":"AlgoSHA","type":"object"},"algoPhpass":{"description":"AlgoPHPass","type":"object"},"algoBcrypt":{"description":"AlgoBcrypt","type":"object"},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["memoryCost","timeCost","threads"]},"account":{"description":"Account","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"type":"object","$ref":"#\/definitions\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","registration","status","passwordUpdate","email","phone","emailVerification","phoneVerification","prefs"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true}},"required":["$id","$createdAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","secret","expire"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the Europian Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"bucket":{"description":"Bucket","type":"object","properties":{"$id":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Bucket creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Bucket update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Bucket permissions. [Learn more about permissions](\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"fileSecurity":{"type":"boolean","description":"Whether file-level security is enabled. [Learn more about permissions](\/docs\/permissions).","x-example":true},"name":{"type":"string","description":"Bucket name.","x-example":"Documents"},"enabled":{"type":"boolean","description":"Bucket enabled.","x-example":false},"maximumFileSize":{"type":"integer","description":"Maximum file size supported.","x-example":100,"format":"int32"},"allowedFileExtensions":{"type":"array","description":"Allowed file extensions.","items":{"type":"string"},"x-example":["jpg","png"]},"compression":{"type":"string","description":"Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).","x-example":"gzip"},"encryption":{"type":"boolean","description":"Bucket is encrypted.","x-example":false},"antivirus":{"type":"boolean","description":"Virus scanning is enabled.","x-example":false}},"required":["$id","$createdAt","$updatedAt","$permissions","fileSecurity","name","enabled","maximumFileSize","allowedFileExtensions","compression","encryption","antivirus"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","name","total"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":"admin"}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","roles"]},"function":{"description":"Function","type":"object","properties":{"$id":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Function creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Function update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"execute":{"type":"array","description":"Execution permissions.","items":{"type":"string"},"x-example":"users"},"name":{"type":"string","description":"Function name.","x-example":"My Function"},"enabled":{"type":"boolean","description":"Function enabled.","x-example":false},"runtime":{"type":"string","description":"Function execution runtime.","x-example":"python-3.8"},"deployment":{"type":"string","description":"Function's active deployment ID.","x-example":"5e5ea5c16897e"},"vars":{"type":"array","description":"Function variables.","items":{"type":"object","$ref":"#\/definitions\/variable"},"x-example":[]},"events":{"type":"array","description":"Function trigger events.","items":{"type":"string"},"x-example":"account.create"},"schedule":{"type":"string","description":"Function execution schedult in CRON format.","x-example":"5 4 * * *"},"scheduleNext":{"type":"string","description":"Function's next scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"schedulePrevious":{"type":"string","description":"Function's previous scheduled execution time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"timeout":{"type":"integer","description":"Function execution timeout in seconds.","x-example":1592981237,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","execute","name","enabled","runtime","deployment","vars","events","schedule","scheduleNext","schedulePrevious","timeout"]},"runtime":{"description":"Runtime","type":"object","properties":{"$id":{"type":"string","description":"Runtime ID.","x-example":"python-3.8"},"name":{"type":"string","description":"Runtime Name.","x-example":"Python"},"version":{"type":"string","description":"Runtime version.","x-example":"3.8"},"base":{"type":"string","description":"Base Docker image used to build the runtime.","x-example":"python:3.8-alpine"},"image":{"type":"string","description":"Image name of Docker Hub.","x-example":"appwrite\\\/runtime-for-python:3.8"},"logo":{"type":"string","description":"Name of the logo image.","x-example":"python.png"},"supports":{"type":"array","description":"List of supported architectures.","items":{"type":"string"},"x-example":"amd64"}},"required":["$id","name","version","base","image","logo","supports"]},"deployment":{"description":"Deployment","type":"object","properties":{"$id":{"type":"string","description":"Deployment ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Deployment creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Deployment update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"resourceId":{"type":"string","description":"Resource ID.","x-example":"5e5ea6g16897e"},"resourceType":{"type":"string","description":"Resource type.","x-example":"functions"},"entrypoint":{"type":"string","description":"The entrypoint file to use to execute the deployment code.","x-example":"enabled"},"size":{"type":"integer","description":"The code size in bytes.","x-example":128,"format":"int32"},"buildId":{"type":"string","description":"The current build ID.","x-example":"5e5ea5c16897e"},"activate":{"type":"boolean","description":"Whether the deployment should be automatically activated.","x-example":true},"status":{"type":"string","description":"The deployment status. Possible values are \"processing\", \"building\", \"pending\", \"ready\", and \"failed\".","x-example":"ready"},"buildStdout":{"type":"string","description":"The build stdout.","x-example":"enabled"},"buildStderr":{"type":"string","description":"The build stderr.","x-example":"enabled"},"buildTime":{"type":"integer","description":"The current build time in seconds.","x-example":128,"format":"int32"}},"required":["$id","$createdAt","$updatedAt","resourceId","resourceType","entrypoint","size","buildId","activate","status","buildStdout","buildStderr","buildTime"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"statusCode":{"type":"integer","description":"The script status code.","x-example":0,"format":"int32"},"response":{"type":"string","description":"The script response output string. Logs the last 4,000 characters of the execution response output.","x-example":""},"stdout":{"type":"string","description":"The script stdout output string. Logs the last 4,000 characters of the execution stdout output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"stderr":{"type":"string","description":"The script stderr output string. Logs the last 4,000 characters of the execution stderr output. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"The script execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","statusCode","response","stdout","stderr","duration"]},"variable":{"description":"Variable","type":"object","properties":{"$id":{"type":"string","description":"Variable ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Variable creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"key":{"type":"string","description":"Variable key.","x-example":"API_KEY"},"value":{"type":"string","description":"Variable value.","x-example":"myPa$$word1"},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea5c16897e"}},"required":["$id","$createdAt","$updatedAt","key","value","functionId"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"healthAntivirus":{"description":"Health Antivirus","type":"object","properties":{"version":{"type":"string","description":"Antivirus version.","x-example":"1.0.0"},"status":{"type":"string","description":"Antivirus status. Possible values can are: `disabled`, `offline`, `online`","x-example":"online"}},"required":["version","status"]},"healthQueue":{"description":"Health Queue","type":"object","properties":{"size":{"type":"integer","description":"Amount of actions in the queue.","x-example":8,"format":"int32"}},"required":["size"]},"healthStatus":{"description":"Health Status","type":"object","properties":{"ping":{"type":"integer","description":"Duration in milliseconds how long the health check took.","x-example":128,"format":"int32"},"status":{"type":"string","description":"Service status. Possible values can are: `pass`, `fail`","x-example":"pass"}},"required":["ping","status"]},"healthTime":{"description":"Health Time","type":"object","properties":{"remoteTime":{"type":"integer","description":"Current unix timestamp on trustful remote server.","x-example":1639490751,"format":"int32"},"localTime":{"type":"integer","description":"Current unix timestamp of local server where Appwrite runs.","x-example":1639490844,"format":"int32"},"diff":{"type":"integer","description":"Difference of unix remote and local timestamps in milliseconds.","x-example":93,"format":"int32"}},"required":["remoteTime","localTime","diff"]}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}} \ No newline at end of file From 3b6035b585c543a9e74add96f6201804436131b6 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 18:59:04 +0100 Subject: [PATCH 56/62] chore: update console --- app/console | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/console b/app/console index 49eec28b8..de73c020a 160000 --- a/app/console +++ b/app/console @@ -1 +1 @@ -Subproject commit 49eec28b88f1c9f2c3cd29330f4bcd599f8a851c +Subproject commit de73c020a7798e580c48197816124ca4783e115b From deefff537d5069a31f6ce8a34d78ea645ed6ee95 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 16 Nov 2022 00:37:13 +0100 Subject: [PATCH 57/62] ci: fetch submodules --- .github/workflows/tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1d1d10c8a..8e185944b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,6 +13,8 @@ jobs: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 + # Fetch submodules + submodules: recursive # If this run was triggered by a pull request event, then checkout # the head of the pull request instead of the merge commit. From 9a09ee23f1ac62d34e76504393f840c747f02f10 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 16 Nov 2022 00:38:48 +0100 Subject: [PATCH 58/62] ci: fix submodule url --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 21c5e2123..878f14d82 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "app/console"] path = app/console - url = https://github.com/app/console + url = https://github.com/app/console.git branch = main From 40c71a7b5300f76b2dc79ca5db6c2f1e12350f30 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 16 Nov 2022 00:41:37 +0100 Subject: [PATCH 59/62] ci. fix submodules --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 878f14d82..abda97c8a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "app/console"] path = app/console - url = https://github.com/app/console.git + url = https://github.com/appwrite/console branch = main From 9c95e404587a02cf09d920bd5c89d0e2a3d1920a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 15 Nov 2022 23:56:33 +0000 Subject: [PATCH 60/62] fix: console to use tag --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index abda97c8a..dc04bee3c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "app/console"] path = app/console url = https://github.com/appwrite/console - branch = main + branch = 2.0.0 From b71ddd1d26651bd3bcc370dffb56b5f7a32b468d Mon Sep 17 00:00:00 2001 From: Aditya Oberai Date: Wed, 16 Nov 2022 07:14:44 +0000 Subject: [PATCH 61/62] Update console image in Readme --- public/images/github.png | Bin 2331354 -> 535217 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/github.png b/public/images/github.png index fd96e8923fa33d165f895aa9544d2996b6aeb19d..c479f5f0ff7fbae10c81fb66e0c8ab0bba139c2f 100644 GIT binary patch literal 535217 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%0A}$p}J1C_v*GjID6Izhm|6qYw1kE;PPP?bCO@* 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 FSW_lSz3-p6+=Rz50e8zBGFDFwk2y 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


nlH*<^s}fa_ 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 z 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�wqzBSr=keZ5=l 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 literal 2331354 zcmeFZXH*kg*gtB;0@yf;bPGkL6MD6xNK=&Fl#T%+h7KWC6ak|kgdPc zNJ0n@CG-vf0)b@iBzWHUcs`u_<=%DwAFgY;GJDUSo$%D(Q}#q&F}cXQTX6TLO`CWP zE}b{qv`IK|)25w^JGsD_IXWE*e(bt^$r`?C(@}Ny|IHT?6mNi&o8e{`&u+?V6CMW# z+uY9>pV_pj0L8t2bNi;_u`q-4XRZfro~kj9cJK_K1kTugb1JgcF*X~za{jRKx03?; zB@*Nl%>!1>TY9%WhbV2kzIBfa%(-q})%V6OaenI)-`hUL)JN9D^1DUf<1;#x&g*<4 z%Gc;fLc8C-eF_lC`cI8VQ;g5Wj31pG(Lv)Y{L|rhIHjzotM%CG+UCH4P|R#T68~le z`D`cn>;C_L|33vd6sWFPL{J_%V*1C+MphSda^8BTCCyY`Dg8(hG&CE)#S>!SPiVy& z2F_uPp)#}Nk2s~S^qgB&#U1gh{*WcAc6PyPL0+=^m{dQ%^*xxgn{3!>V^E(cjv2M4 zEpV-H4{5z>O1na5$_9QJr*~2a?{jIkZ{YHjJn6x_kp#4J6+W8SPn%kQswF)JeDYd& z#&SOmjEONbkSSXkn9K|$`Z22mDZH0)kv+@3@gX(b0jTd?M6o)6Vx2{K_HsZ$bw4<< zo!PJe4%fmKF|`?hK)W9M0m{f-melwdW%xC6QLNzstAjmzpZx)RT-y7easWGNzpUf@ zB_Vd!xTPR>;>*3H<)X!p_U@lhT(j}|%R^NuC$AMmkPz{~)syaWHXeynMTWcdslje1 zObP8Mt(mWx4n2<-m9|nG68Le6X&5;YF$cI6{hHFqa-SrRqD{|#4ezQGlQX`wcFRs* zF$)$PquM~J^?j|6YpHZKlCymN71E*EFy`2f1?h1SAgQ+lVH6I17WK&Cm(H=NQWXIH zDg29ijo^qfyy~~;h+Jd;b+GuX(*RW%Bmy3Hk2Sic&mk;8T0SSpAxlXVs{{KAFc1Yt za`^Wd0E0{iX^PA?+RhLgy$fEc?pf5MsIeD|G4Z8howX)Re4E&RQf$EJ4Jj<_4Jr81 z3kRjHTD5Uou>l2dt}sCE*PHuSOr2~8w5NHQNk_>|<#_dm$k$pGc6IqzRfz^VyWXvY z#~2Q(mZIQF|mB>F(DH;eU}6 zBChJyu9dn}TEylwxOmM}2|8v_f)r1`6L}HlXyY!Q-XWJ`>cy5Qw!m-%f-Ojo~+ z0IsL+_n!yerZhp9kAi>cZ6H+9;PDq`3@V@Mt5*8ied9r=69w@q<|+hggGH|^f>?+l{R>lMU|*6kJE zhF%M}RceY;@l+dHtwoTJc|(99vu#O&EmaB)1W-OkIu*XS^NXGTig3FkMxH}&f4FK& z&}%U$)GdM~&5&L48sBb-ElEm!e9PnjffS=rP9^biVgo6HshmS0WPAodl>m$^<~2om(9wO`M|&L7$}p- zY|J|xN5}m86(Y)|;+W^z515V|ZPX4ES#*3K32W|-&-77|0!e?N9h5Z-J>wWq3sJ1e z-#;RfO<7FKx!B+p%`vPAA0;7M+MxfI3Fmu}XMo)BWI>LQ6aBv)9!xh{=3|pzFX^#3 zZO*?PnI>5)YiSu<*`2!abMLcknaU~=EXpaSVf*%fk-hrtp)G$*%`GV<##Koq{FFcP zX*Q>AwJl%;+ox^xXn%(D(foQxBk+#7d|RuezjpDI&??hDdW{x}`) zYd+!!CC69`PDhs9LtEqsJ_yM$`5qT zPWGqHP76QM5i_1)^_5fPNY}{30eo(B4Qe#2xO+|Y+q5;Z=ZqtRCbI0Xo7K--LZ`)l zEgHfjW|v<@O`0z-#Jv+OdbT1R*2^z^sWn8X+ILZ{533x)Ul)E1>;YwVc2xCHAeE!D z9GP!$0*MJ;aqQ%8k*0fsb13F+#zjB`G#yBFgR-_-VQ>VRMJ%|7<2~^6I`<=xYsje# z!T-CB0rPPz-2V^S{(JD#{3e$>Y{q2ltcbycUyL&BmCtbCYhyzpBr|kbsJF?8+~0D% zK!oCcnA)Tqn&(hcc^fX;^`*zjF}Bt7TX`7S7a{&m7V~H=57#yEbv8rHJ=??%?X?#X zder+@42!hhSL6|$|B-0Z<<*i4IoNPBlw>mr+Gh>-*y*dzh)Q#Jmo#NPbj5O}@5s5d z`04Yq4?|+7F4CrYNX(PtSdNS}+w5gvOli<4*4v85wV-F=JPJw{CR&6URZQ3p`k909 zTQh;F^pDEe(lN*6&@u8k;223%g|Gv>*Vxm6y#%!fA8=HBKN8*$oPYWMl+D73?O3tw z;Rj>_b-3&)0m8iSm4H`r?M!y*z^dX`_Om^ZGxZ);}kI^Mh=5_udBajlg9;5524LBgqHtp8F`h_}H z=A|XeV^{>sExplhL=@aAu9R)3Ks>T2FWq*jbVqhmDM6H3hNrYZlA8NKOo8lF1=T0c z4_xc|O`vi4hB=AQn*l7ZrUXmElS09tVcH8iU}WqwP_uH>kCQ}mPLXXw7b&_(2;M~w zjz_lxP5%C#2Ns6kX96&x z{l1)NXok{XhTbfZ<{X7PhU@meo^|yvXIhvC$h`0Fyr^HFX@0nnUCAL;Sk3(SewZBV;4!gfBY@cIg*i`8et@NKBsi^#nNE6gKl6Ro2Z&=;Vx>p>P{$c2Z9D727F zA?r)xAvm?{4#*7rlx2Ve$J(G+MUW>T16l;%fL>Uo*O+(!5DF(PK9yeGJIJsdwVyQqe9RsjcSpA-aI^G(l6-)x zdfp;+vl@iz7U7z-#>+L(GqaK|(A1y*{l`nMk)IwmZB2Qu32iMTC0KM@^hmr$-&=D@ zx{Q6_Fc(B}{v+o0$*;$%ZX7*4&L3G3zQ1ACc)AwVQZCleK2fHKYWYF2!QS!?W99(2 z8_#E>tkgsT?e^-?72aD(wL)_mho-(69*>O@{8;$8hf>*6=V+l&@#I(|eXaNj|B)7E z1oxq2rsQPRPPB^=p&4JMlKyE=RD=mt!!fwSpt^1ws15pQ%J~J79K~2>aQt!y(mx%P zbdL70Kjg>s$Qc%5Yyb)(#j5+PqSC*qEH!G`jb8Fh`M64H%y-0^nmOHWrg zggPJX8#>Hqyh3u_WtK7_y|qH1=K-mvvih?Sk?%M%{t(adz-{at)x+-ozDd8=t+z~W z%H%4pE_WH8ER5O~Tk&l2uV!VOVnt$IzONlW#pF)XdB%zkFSNJ1`iKD3Lf1CCkuf_v z3v=PuE*?N2V<2%3@Ai$hTVZ^Bn4=?nDnH6|jwj@IQiHwIDyFtP4U!ass;cQNQbgH6 zs)z=nEXQ}F905hKvb8~qbs%-*7BSD9@1%ENGojB|lMoOmA+vRWSAb_#?h+=29SmrO_-9OAlIL`l=U+4DPB*l?N=-sM2re@ZblPIVh-8)-eQ#CF``|tu z1@Sa=4oh$l!1B?U^;15s)Au(q55A~~I?%~2^k%izpLDwUl@Buy;$t8urRe9W;nR2Ik{}5>)ejEi-ei9VBZTm6=cr!q>XIU?>%9s@l5Ihs*uwZsNt4Ubuq zite=ii`bn|PRPl>h)DyLW%im37tYxU_=3|rtX#$IBQ^U@-=Ej2 zYCkO)!L$&8nP4U}`~~i>4Oj)XG)inQ;@{tr8!7Ph>q@ra-Vq$17}R~_&eNDAjY+z` zr?YbmBV1T07qRGX8!9M&_EM)5dQY+34=bv+cTN#rsiypu*2L<(Go4?mC5`EoKJWB| zU{{1F3(rl{$G}IC8QmCYeoDnYr+^p^jixm~;$WSo;%fAPqS0N<{2rnOJ6w(NeFX%B zjv?LtzgdQLW0H0C<*&s{@#-b4roF+RqFs2Tn%R-pgWP)7+OxQ;H8ZLtZnawwRX<-* zaLIZ7_`o&dT)!)=pgM==-(33VxQ=nY=+@3XSw=khx)dR|+^N*YGFR1S)8{jCAy*8? zzNUO{s2up-FKC(|)-36IsCF+P(r^S40R?p3l^wet*7`nFVg)MCg=jU>nE|HUY ze*5ZOas8DF!vnFZs)97TCHo~$*TL;P(u5%AcQF&blLc+%s$sUiHG`VPa{N0(pD$Am z)AdVD8$-P6bzpWj1&T%VZjF=*zngutUg_a^1z}!zw4;B;_daXWrt__th~iqRgCrc5 zz7<4HL>V>`QjtFckZektULgYy*)U%N@zk?G409tr;|>NUT^hSU7D6WPvbuaZ+S37K zIxgzjaxtrl+9&oh^M&~tuqhPCdC>a^fv~I10Msmu^$yS^3T^0{6!Q&0QW~SAJ+eTK zA&1M`k$5oqak11jo6N{{#Tle+~2`3r5%u zzujMa_14$vo`3^Eiqnvj(gwk>6AtA!Vlos-wUDoVD@!cI9l|r$OTdtP4P8Z7^o|`tL z-ruY@qcG5Dvn?ac^&@@hORovIxG>jn|6rI6wXu`=?Eq=rB_#N)>dZ*R9F%0UW<^=T zzL@eRIGW?~-4hM{U!1XPsL**jEELjnX<@L^0(v;y*4;Dpu^uVvIZNxY_YmMXpije>D|9@M%-@KlD1w6vI zFP^ea+PBF}Y_`!R$T7Zz+H1JgAfi;NR!ME3C!ssH>G5f_vzYbi=7p6b&*Dxe9teZV zsb|LLPxM|)aOi#F8TT_`@JYJnKXvEd*LRQKQwNOo=id8+X0X?4lqoG)Qr<>RNs1a|^#5$(yW)hVa%gy%@ zhCFkIs&sec!e)}|PS%~fQwxz5zH6Gf0T!)#&kSO@#RcIhcBw~KB{rK^1d+~{ryj}W zm%C#1P^Yme8Z9A?K5!jjUmF$-aj3lM$`oDW-Z2>3X=z6vS!ag0xu1kyTcB0!q}k>8 zMiiFVJyDkbmS|V{JZ+pHagY>LqhCZr=NS68ovYyeo7R}Lb0EEo;4v)Ae0dO8&EoH3 z*r4Ed{LThlY;E9VIoY$n(ZwIE*v?MvOsz{yvTt)UP@`aO1u)Rc9swB%qCI~C-E~QC z=Hf{F!e(J6X{W0#-s*k#vyzTmQqLL(Y64|`#C(>jX)qF>PqE&2DT@h<$H>x3Dt^AO z7#JIbow&CB)60D;ojdaW6ThjS8u-zxQd`ql;+ex6(bJX^cFxvZYv7X>?UDlP+3e@% zy1}ODdGiBG5KEk^8ot=LmFB!ai52Q2D!P~&%}C3^5)-?Yl(uBWjI>5=D^#`7r%yRW zdi0sf!9DDC6>7=fb`Tu0)0O2!pA37k=9PBn)!x2ZpJPo)nX~Wz_O#$FJRr2F5F7OC zf=o)w>tyISv_sGk$`rQ?c|L6&P;tKev`eRn>SM3<#&UkR^NWL{$0zfBaoJJF`;f;w zRjJlXlw1`$zux!jw7;Q%?4$=?KAwLA3<=jOftQAN=|2oz;dc9Z?!@nvWst>-k4_TMKVQUY&bjbobM>|u{h2KLQ@!eBl8$z7H@IFM z?7xx_vEO2(wXpNlC{J1{11cx7=Qzkr+r13n){-O6jLGoBl;I%r zCXbH1oG0B5&X|>setnDPii;0wx8QoX=s(quD$0yhuJ*BZNJuYM`y9Gv~U1*E5r8P zxapc29Q>6S=YKGf>zW@{@{t0R6cQgF z;N})!+Pkn6mey*H-kqaBfHA672vSuKZ$PZ+eyz67dqPtj&i-P2?^KQTRiU4(@;Ev} z`WP@m2%SmFM(0pn(u!8agHwC~C(3I~YdJ1lo26YDl5*1_OgkOF)(^4l9f{xnEg?;EWvdD_Hi3qUIb{+b*^#j zWg6>)ncIHmbzb=&^?QezCZE@SgpJ&{X9NgMpPwbo3DvkLE#(?~ung{Ux_enH%q;fR zOQoex2A70x&vwK~)kZ@@&q|B@$*Mm`1H#q!RNk$vPt@#}xucxt#$}z93?Gdy&QR=$ z&oaVVugM`gcAnQrepHjCuBg)R>czPvk60gpR7BnPOrxomT#*l~kmFllO z58#bxk@s}HiH>*o@y`G1e9|cKmy!zY{ku@~A^89+&!>Bx6Cn&(eMOu7l^5N{%g$k5 zX^U!h9-orzi=W#ayV@NIy~R|OGxx|Px;gu#kU}TVK6H^EC3wKUxpJovOakW5Kx?Qr zPmASGzZideG!8z5KckJ8mZN%jx)v^5S6GNaM!h=O$eqMuYZS*X!G_uOygz+YE`pur zu`KSN*b2HNu&9-E99)xI^sC`G$UM$WR+r{h&UO9($YnGx_yC(ZNT?XwX&v+~W1Qyf zX*vR?l#r8NEAty)INUvse34rg9~k~&!Z-cnYm>po-sgRm!)rze+s>V;o~zb33;_Gy zye+zJpC#V@@`k&*J#e^uz@;!V>fz7$$oH~KzZ!qwr3~&iO{gX8_>)_IjP9!Kb3e88 z`S@cP(|EyFzgMx`<#-LlA5q*ZVpM+glgqMJvR}=9ON+!XA-soC0B+dg?)N4;kxqnA z#*1Eor)m~D(njOmU6r5eQmXA8ZVl17LXn>56qaF4A(Hf-wxKWgG$0{U@&f0K=p*#j zp1_QlMs-`XDA0qkqZy^~{Cdn1!HEdr6{2UHqk}rgFPH>?aD6?AP~`cde#` zNBi1ACaVPGr=EB}V$2_iA;3!Bkp>Lz1XyIcqC@JJB_{>3AgB-R{Lxm4He-`-OmCT@ ziQZ5j>?vLjBQ_E{?0cn;H}C}}^L;3%p!1u-lzoeoAA8u3v+H92gdha~p@LH@0*$FB zC%ME1`;G)6pby=1bH*G&JFn6keNVDz@t4*r?6S1gTf9)S+h$pbUAxCSwPsDD98@g> zcm&65ZW+`ynQs=aLCSGuM6)V8oTdCXUG}Z5m0MZ+gDL+S{FHsAgb{Q*+iH|Ine6nn z%H^Jfvu)c$+oVwYx$hpVv~8)yFp9|maiw=LBhHXh&~OEke7(RM2{l{!>YEieLrjcG zNuMiy_n%fKmbEN=Eh;MuJoZvd{`98+TmC&R`t+dr(*Ye1)G8YaRC%WOzJ`~7KaxVN zFBX&6u=3TopggB0e_{@PnE+-u&WA*vw<5RduL&7Aj$aU%UwGC&>(cV;EXr@7G_O&# zm~iv>$T#jov4)D0qn21^FfX)AQ`&k!A1c#HFi}wzg3Is|Rq~vFSe2TPbluUWEq2>F zli8)>4Q8QOLe6cBLw}pEzb88YH-f%uX(Cu$XPd%fpxe7vif6NFc^}g;J;%WAaUz(g z2BWTY{{Q7+1`uMzUNiD{xs#n0L@r`po&#Vg7PA^+yrLSnJi2h`SAXc&u(S?*$uV`; zMWpwo8Cl!nFi#~huRAyIiN9TL=k>P>5%e-UfU-B!KWo3A-^Fa<=S!!h%wNENl_Bn` zJ@&8=>0Csn&igs(+TRS1PjuUS)IGYu^YmrNbZ-@6jUv;NX^Qf9k*ss!*>dt4WMQuU zRcvHd@UkMcDBgeR;@1ELisi_3%MVP_h%NqUGta4_5M_dz+`UA*1F!U#3By~z4Gkza zmPIer&JrH&h_&;1UJ`G2t37P$%>#=Rs2$e}hfNAi>y{s&_NVByQJ_KVR_X zC+Kn`!<{Q@)@W(PS9J)MgF=(yyW~#B)Wyx{WV?@NpycKUzSTXC+Z5LUl``0L*>gws z%PT&MoBtCXLZ1p)Ztb|;tNbS6Vy5c*J(O>Krw-gVmUQd6Kn*n_mgXSDWC{=8-*GOl zrtJR3N_s&ma;QDXZhN%fyQLV9^Qu&&S%B(y7dH=|no#Eew>C%O5iv@QHKJ`wk7yzj zCjdwsrlRq?^z`+lAa5QojBh_sV6Xu_zUlSWBhj(HiQ?nA^(+dG7~RMQb|6dD z8XvGEx(_fg>@*|R`VbR8!%i2o7%zZ#XlckQrm{| ziWd`e-z|!4y{ql4nHSyCrmY9{TMo8pNW!FW&3X(TGLYY<{=)9If?`WblI=TOAZ#H$ zaoLs{JM`vm!cpXi*`r8By_Z`18Mo{oKF|F;(&xH+m|kyGaf^qw8}+239Y!5MldiWcm(9zXeMT9 zg;qRx36Ew;d4pWSo*dJ&-Lb(&(}ugOlr@k=z{pdT5fl;|#F|(0I}=0A^{< zi+Y~y*w`3MFKKeLv;(QhwMgmH12<5!%;}hNcnxHk3<`s7N#To>M0o~!LKqCCQ$S-0 z+s(ieHZwV}vrF+6Fv0?p_1Frh7&rQErm6n{P~98mGXPu|SZ^Oa3^KXvu)0#mfad4p z+2O9b--qUcU`fd0bb3N-5FQtBHk=qFw)G<8;yZ^b#s08B>xv$W1S$CsTZ}IsNQ}K3 z`v?2}HE7rg+qUF6xW!mg^0P>qwg21K<`bI|YMBOC8Y9NLg`iSQL+|#O5%MF*cGPCc zbIE(vEB3e43AL>V#WbcEB=42180T$dh_`?YtuYrQ2H}dT99OSM2Xy~ z=LgYSm76eD1$*Le>N+UxZy3QO8A_VCIM4f^W7*J*jHbIK4)f9wx28-9S~X9O*`i!> z*Dq{tt+ko%QD4`1fs;5GQ<9e2Jk`=Rjc*Y&#fjhoj|mlN0aAkKd)K{-aR-~-lNYFl za`WmPF&-fRW_d?F>q)5C-!=cK~WW(YjiWQ}IRA*Tv0e z-M=WgS)vBrvg4&)ar!=wLg==SsVjp+?K{*$hU^CBbgvP|Y`oRhk;f(a%Z|o|a{pJ} z@#mx@SAufa2el^=cb|0xof>fI-FZNRo_X)+HvzA-7b?js2WT$h>V#piwHk5n^@X_}* zn5P2S;y!woV-2k}*=0g-Vk1%m0md0Xik;itP}ctiHeji8glheK**Z;2h{VbOmKq-Y zhM{TP8#|8wMwY)5llNJ}OJIl>AnX{dI#`x1)Ep#cIlR;v7%GDwb{8#NaR??X61P9= zn_HF5w@sL>tvYOEMsYrE;JGcqkA+o!+?IFowS|K>e0zBsRgVVwf5Quj`@=16zFdI8^jOd6hVDnC0AR=r<-M|*?N^9)ZC z&v#h}Tmk0p#xzD|-Q7m3*>=1_4ceeNPwMaQk1ZuJ>sz+-7#D>p1X{Y*+|*8PV%o)N zxZ#+M7q%AIJ2s?r6&db!3E5xQSKZ)e|8?l>la>>Dwd6`E=(TBs7EFq5sat`U9k-*r zHMZ4jT^Em1v2%G*ss+D#A(ie1H7!&zSq|#1eGA8EAPEGw(r2vL2VN{*5&h{6(+3Rw zZwnl(Ro1r1>JVEClG!@d%eII@>^#T+l;Sz8C|lmhM}lm{>;sp8*(&#|95oZ8u~lrE zT@mnYb+QKU*@6X6PzwR@HY{h!SCtf%hrV)^7v#UZ`zf z?QfxC34&z_J2K(4urk~DneQn zTe>}4GD`GQNLE5Px&hy5xnQ))zqX_A$BZDWPi-n$wI_VuM^jp#n4;APu zh6nn-3ERR$?H1H5V;TwYG~arJhrLzo61v47-aYWBr2jIQtl!Se?;0?bmVL+OgcZ%2o7z>jz$@>%k~3}mfnwZV^CX}E`S6i(SQ<)W0g27L0P zYIa@h=fAW@pdma8<6^DwcjTry>5{AEN{bPT9y00MqJL<%Ri|x#xi~WOODi$`@uG!5 zmhms!w(ELZFaL{uUvCN9>rM=FH3Z5(JF8gi-Q~>oU%8>zMsGI z1eatBm5oItrVx58qo`5J@Dz9hT&j}ij2ugVh|+n_d5@5-8#dwUlq(eX6+!87cz zP3!o5*58E~z-yWlV`ED8oV!G~s!H17of8){U?W=YV_s))GQ4sSOB<;EW;p~zxlVg>p=Acn|Dl8b8UzVE zJ@X?)Q;Ms@Ol}0V^est$+P*czI$bR@gb#WtN|LB}HxpQzZFAA$diJvS_9SmLw|k37 zYn85X?9bSN^D;-ZhYT8+38MP3=Z94dkpNT#qw%pC!>@l${o2GSUn7 z)MMil{`ew5%?yzGqHX#xgcZu8Ezq^3h__tLtG;od+TLtOYTpxAMCHR*aczOB{LzI6 zuNQ_m-8EpU<~tl;apBo%z5UVp0Ty;l`CrHT9h}&E63M=^F3@!-TQ_TpXk-hs_!?3 z`&?t9wm60U5>D5iV0{ZFg%yQc*vq^~ZH*%h>`g{ z;3C#WC>OpD2~r+IW~cLs_6>6&10CbRzzz7oF6;RAcL2A%i`&kugHuQ!b~(W@P~|Uwg6tA@8?HzIYB{lzTFfwtQX_Btolc9Ip zs{)pdD%DF%IgMZoisVijdTxa&2 zCEZGM7o{w_q%r$!(AT$hA#LRI3a$m!nv)DU`b>GHIep^gUw%y12p6kzs;{FGLxlA>Dt+IJ3kDKVC& z5XJzey!f@r;=V((uU)(~9i6&G|7C0c80MIw!vY63oeI8f06{;Sbvv~5?kWV0^P@*| znI~~2d2uBcJE}C}e!ftYZAJ@xop~w+;W2HgH{0=Yap~iYxVG=9Nj0X$JnfwdXmqJF zqtW9A9ml*ei02^>^!1;@yju&e86Q9?K9icHloiy}FrRIMu%5EYoE*$x!|Q`Kc@?6z zF%_*Pib-X76b@mJvZCNmDvsrs5N_Jdzln$|-5U<`LQ#izH&&2uRjw}^`s$z za)pX5Q^7O?xfdQKRq?HAc6l#yLk)$T1+Y89FKgU<>a-cV%PZ$J~cM2#c$8xnFX^v zzXl#_V;t9^=BJx}dfL96J$g5D_|fS&^I(JfMwdayc~8n-EK2?tV7S%H=15}%(7wfZ z4_5Ao#2=jd*TCg`*ZXP(ADaO5;S1mH8%Rc&&V!ls24X=V?1sN2;nW8gg)$%I36}_x z%#)$#7SWZ|Q03XnqE|Yb&eP^@s1xW;nt3g_ghS1SiYLpWTM|TD#*Jx3FzNNSW3das8s5JgHzQ zDU^Xd?Brui6|D%ML{2~Qt)Z?hxgmV{&FX3Unp#VccV@y|*7zpX2y_ul?S#xj_>zgL zBbj>8TV-^*AwCy{vDCiU`1VL#DN)08UN}c{gOiJxX$Z(GQpMaf*nD5hPU|d(gXtAm zFvz0@cF~;eIw9_gWJ9peTJ1h7g>52H?51IkTINqmPNS%2fa#*AAp84RuYmOyP$wxi zUF8?S`k&7>rdl(&R%{Kl+MK-{i6H7?@2$vLR_4Ovn8nJNJ(&ezWIUCUUNTEswsq}; zP0(YrX0wNP(FT-4^S2n4ii%lv5@`c!v%zscV`#wxP5lB-w0 z_uX5qtuu%1%#f`hz9j`7uro_N(AfgL+_YWjq;H; zExRWQ;|(J(>=&Qg-QG7D$_HrOl%*Jq^eK-uD1u$wT=NcI-Y-FGUx8!&iV&7$MQO|*IGKruo{f_|UXRg#?WrW4S^Gfe3 z7A@4Sgc$A9MD~j2mMI_6fIsHrtUX zy!G;BMPdG~c@OncWr(t&w~J^@^T5zlGvig9l5=8P?Pv@2mqwCZY`gMXLxsm`a=ITn z3k`S6*;o2qj%^kbrYG_$N<-RC-?_m}6kQ_m!mJp6W91ok~gDV}B^q zzLD~`WBi6&VP&_6r`5O>tb2Z*hf%zdSqdF7GcKa9NMGZ-<>nW2Mx0qD;KJm4V3@vh)j1i$Ob#ZtV5MT+ zn|bQmrmBXGKF2rq7=1HKi8Za%HTw!zcogbftacs4GeV!xsZuy&Od7~^FrsukceJEzEykddWBR4sf49il zI=_ezHbEW9M$`NMd>N{HQ1W%&b{_0<= zsh0AR-WHv6-z3D;x)HV=EnM5Z)iUfhwd}_|$&0YmP}FCMi`X=EjQt#SwJugMXy`J4 z8J607%=vDk+i8Qwtws!0@oj1UX$+*V9v@k``L0FglZ!IkX5Zx`#n4*?h(+<0+>dBv|@3a!r~Y|!Dyn$i1|J5$0CpA52$Yiw(y)ghnCU&XRQS5uOo54V31 zeqe|jb%|Bg?KmOQ(%vDHZl8GjR8{@y`v(1^j@3c)_KotQhiM2K3(3iBUxCvh!Dp04 z0&S-+J3ZYy!U#lE#!#A8R-1mD*YkwbsxeX%S?+{iX%;#!NKpcXzSSwi?vpR4C+)&Z z117a0Xb)xlyQR1^SFPiu3Xhm<-_K{V`vYy($TsAllV_pKL5EzMst=C{Avrcs(2|2$ zNzU>8(#IgD@U2^!Wz8;Zt;ED|v%_2sd@j4Z0(bVA-n_w9HL!2%HQ)ssY5IS8ow+A` z@O2@=5Alqmn(&EO%lb)t%8~^{XqhW@Aczy<-Yfyx+v~QHzAd$7i&5q1LsRZ>jnFU< zzQd)Cj%BLj(?eF2W#?(F4B&@+&u-zQVS{;|1Z{(fNSgYA8~=4a<_K3@^u6Q5?Junb z)M`44=4(&PX8ckPMR^)%K=LfOEZu`tGA3_4=auYLeC6Vlm%GK#?TmPuHE~B|U(=S$ zA0ySd;$`rSL&5Lk^QOz|o@WU3w&30T5+V$2Qa$@q-njFSXD^puKdM_hm6{aZwhq(x zvz)O?c-q5UYHV zgW6}4%6(X!J1Lf7$TD-u@#8f^&OY*AYHNjXDoIeNz3tk;Ucp{G!QzVsrsD9Ry=Us@ zay*1zyIL#oBzS}%+{=J6yPIK(v}C6z-j51{{GQTojfNIJ%Y`2W^Nso7bbgH-n8p;4 z`W;@UvV*I6?BbqkqD zyePk)60e*Xo*wuL3>-eUcDfAD(ej<-CUPfa7P@?`1W za1jhMd-qvF8j@XW`|0~Wm%@w&gf-Tg%J!G-6q(6Ar?v6bl zJUNfc4fd42S+e!jv=Kh*C|Q8nstx3s#@#rtmQh}1bTk2>W@n|)Xvzp8q8c2pJnxQi zZe-wF#($YTARLyY!dfBHDbdX9*$8PNImz#G=RZt1g7~54lV!K?SJy4?za$R2?w-vn z8X>snpsO)9zH%06k4Z(Ivznq=@>(9#RF}Pi{IKG-%bF2Mqc7P9TNB-SJx3;kyhR3W zR^UJBsuSBe6;`l|Z<%wH*1aKy<&NLVaD;GTD)4M=@P?EA+pL4BvuSqT`aY|xgySHH zqu=Q4Z1xoU^vB=XX+15UMZHkbb|85bWGWllw}1wP6WL+O*RZpsz)MK?cYWgOZ*{&+ z4tGiF%5!Ub)+#Xl?@2V=jcbEhtTyLVOFQe9DAr}t3oGhgI^Q-BJ8!0QdtisuHGH4d zyO%=RfsJcF$#7llgmo9d&wLbjI*uWF|LRlm^b3|3&sHL$vj6q=5SYOF=fnT>@&l5K zv(5;k>s_uy{|CPc*Z0UTlTTqvEEj%kJHKN_XBUQ>`&VhB zYm>zMz5dH|y6fr;d2D%kxiUo!w%lBJhl-1No#vYCVbfRyTN9a>nVAVF^XZS}3XgVn zOsL2qBj>;I_fM0{T;1I-E~=&AmzPWXD&QBL5NO>y<=8yBA4&$i5+tb|8H4-mWf$jyvr%!pY(?}X6|$8=O%Q*Rm5jq20t z?IWs5{N~gl<{u-%yhAxu8{-8Yv0N!uuvEzrt1m+SRh;&w!pn%n%F&i*8Rca|n#vgAMn;8J|dW@bJI3jhZ|6SI+{^RpY%%a3BAwt-JkHi1hqLZDPOrsM!OeT0OBDk)|o zo}sTqvtD1BGtYfvNlCaf+Lm@p529yT-(9j$Lw`12^*$2?C-?V@gv0tPRhDbY%7`f# ztD4f-aqBI3Ijj!X>cjPN37U>YPnh z*_`Lv+M19qY;}yTzdCRmg{M@9tuDM{^@grHu+mRZq}JK}ieJ#auG6Gmu%diwxYR8@ zPD@Km>T8wGY&j*+Za|AnCeKyPa{iqj z*yvN#D@xeN(Bb+vAS4BK5ac=vzJVtHwk&4=I6Ff`NoLz1@HHoY_Z}ci4{aD4%3&b} z+BpLVOv7HrUc|;rhc>-MQ5b*0h-3Xq`RIi1z_ozkf%$Pc*xb`#Q|meOs{3MQ7Oa(- zzLP@D4Q@k`H zzI^EGUcDd6D$xO;fH*T6#E>}@Cq#U;A~4?do-rWbwI-zI^F)_{SX~(Yg;>?9Ca;6G zCt`G@HN~9iN_yQ23QGagw#>(~B7x+0qO7QhiXC2_CYyEYAD;qOwgXD|iA8+6j?jV% zY<1B!tpBYcIzlNKNuRN|J%>QM4y^dtRR{Shx5`nLLX8505y7+Gc6f}QSUB2ynP1NC z@Wen>AnfocXaXN&lSGAuue&*9#gz3Irq>s{3Vn5ER?;`G$$8V4!vPke!}lSpn57^! z-8?eVV1_%=thg57Y^w=4+}9uxa(;BI`nk%6sL^jC{Q4^8G)>Bu3;W(*@apQNL7gZz z4&WhMRhC>Sbn^9TZ+h$dVwE?mrCh2oX)5u@+rT_Pu5|R1Zr8dJPWPqAWWti@N%w5Q zY+JN%Zi0L0FUGXjOer!C^BO^xY7L|bEa$XP+G4u%3EwBkR_m!>tq*y6)XkP9$TR&x zq%KBScY$VQWj>mqpuxM@QTyr$#%`^s8HK9L1)|O`yEZ{(kS(hS27NZ*HpY zz#4)lgh1hCw;%c#Z)2jU{_GdG{4Lpm)8KQzW&H0b$?>c%xR|{N_zL^`CO8y31GvgZ zG^}5Jo0o2wHv6Tm;7xcAW_?J?0oXb+UAU+fI1^1}&ZCgk?Xaa_S!8RM#M_oD4mvlJ z%hp8(N^}s!>cOKzSM!tTDbq7EdumlKAfqtG&3;D_b9LL1wr{PM8n;iSUY;k%j1~n= z;WRvI9k(tq<3mQ4u9;HG_l^Lzg`WzWE{Y+P!}#@Xj!s;sn*A`bl6iE_7eREKy&ywz z)_`UQ?U$W%k^j@&%@I0w{d1;H2*(Y$63JDpOpc zT)O4@<8BC(;qN<($e7OSE*;!rvDRDJ3%(MyQkYFC&CR9lrnDR`&qoEpfI)CEd%)GWR?mOlc)6r~{2ysGE>5h$wnzR_#(7|)E}uJS`q^BxP*)YR1W zwhUonx=`Ongows_@EtZDSYJIS3f%p~cs}FV+6d8rW;wu{icG06io1y2$ z%|x*~T>+OC@Lg`QpzsNSiM>7GC)f+C)XjO(7E%Y?X)lu(?imJVe%PKEDT89|C07Q` z51!feT_b(<)m}2CQDgbuRoU{lKzyO!J@eRn{U*Y~~?w18N(AX}<{%96c_mMXFp2b-YmW!NAgi9!V}Q;@wx z0?3xV6A%U2n=phR2nbKeeZkjInQ~{b8e)h?M#qTy2lJI z8Tg-_JAJ*>_h%t-JpaRcTT8#axekIA>fI2}M(9F$8JR|-IZ4DzLRZ>XZ*(VH5G@XB zE!MF}ED(Gt%bjJZNsdIL@X9}v+~gjiF_Il7XWAxpYvkqSNQ<`ub&ff57;p4v=?o>r zFQlrOqD+bk6zs+?uITr&w&1k%E!hDl^uc{M$RRvK>{W(~H{G9~&dPTI4EW z@l3|>xZ-T2sQqSn%{f=CnwKwG5N15nEzX4D8t;vn0*a#V%E#Yu9}3|WaYbE zhNHcv*S|ymUyhPYxNi;q`@atMho6EMc$_8!7DZp3sH<8_8me3oprmiXf9_sS$eBD3 zUxF)<*6R+vOgR)?4<{E*$SC=hxBz8DKmN3N>1Pv*!m?iJIW|%6;Mzr=&9u^KnX-Dp z!tFt(RnzsntKz2g~<-yUgw|CXPtd(+vv(=PqYk+KKv9v15+&{*uV70j+>R-=kj;+=NOl@qTFZg0;- zc3o1Idb_f^O6I=aAEY@c0$B-B>M)wjrOuN$8AaRRfFIZRuOv!7XnkN&tXX@V<+gl@NX7^**_|kt7bM<-e2I)4U zUhw3l!|x%?M%@H2FByI0-tjiumJ9QC)vJgc$qpZnY^awks4vv3{^Nd1PGLjEz4>eC zT2^cGf&R%$b`vc4xEE!sJ#ld*EJ7c*-xp?8Hn@47?$N0EX#HvH_HqRzSsA+Av6>sZ z&S~qAK6@gzM2`ohs+ldSG+6#lhySC$*FE!Q^{2WLKb8Dd-u#vg0~D|)8Uh#8!>?8w z>G%a7``u3&dnX$L;DApMp!jb7&Ikc*C6bGjy`~cw(E<(}Hq`9vk(z&J;hexvSM8m? z0ei`q$zYVWVDuo7m~xZY3rT!qqK{28CxahuTP3P*qf-wPopTNH{VJF`u~`O3FDq5v zT-;h@7Dbkdotd2yiILZ67_Wjwy5>V&K@8r7g)^n!7D)F0IJlaPC(++?LRoEPdu@(N z=cd&Z`OW2(#ChwqPS^XUZmzv&_=MGBku(ZAJm0981VC%5x`a3#bBU|=Q53Gof>2~$ zBmFL{yj;x9W;O6?61flgC)r&rYUsxz>LZ01y&r0EezXOPj~}`dg+uV1>g}A_+M+xI z+E-z3IB|BX9S;NQwPpUO9KquiVsg2)LuBoh`KY~*qO+D9j2i-WJYf4p-g6m?yTV|w zBVvv_vkgWk3o%PeOJcGK=p>geD>z}e&@#M=veH?r;ie@w@1(+QY>29=suE$camAhv z%2$P*zI)RB(((L-Y9niphw=ThL67az=GJ?B}LIOPMds zhy44&h9peGe*EIY=E~G~TNAly_BkiM7z|ung??gxiF8rHvTyN@VR}v9839TDBf+%p zMW?!sonuU%koai3Y?8Wpz?l+=0y9s{3wfGfuvPJxWj*@7i9XI+)@A(aA*cK5a8iK< z$E6~J`wvLY_M2tvTMt;}SDXst5n>-fOY_VyiWgpQESM70#=W5Gs@DPM%}>8>M3D_b zK_#>kI;FVq+kD~Rw?^?L^%c(W48rc0zOyPuGrKO5=Ht!u5$;-+6NUpds{=g)-M^2b z+^NN!O1vY;1?B1z;~LAi6sjlCo0U{`hZkmrUuhq?U*eR$^nSRrFqiRti6G%GS_l;V zszCQI=U#Q-J8xaQ*E$9Ie*Xf}j10Z6$m1(m{?>bl{p+YCc5pfm_)Xx>?W|N0v(}gPT`XBW85827C(i;?>iXI#vmf zVtkPB)hC0}leqsJ-3;U3z4HU#Wa*s3RjSjUIa(*ZM3I)s)`p4kjomDpixoAZfU_*U z1yH;0cu8N0r#5%9pK)6c9j~ja8~X2WjRln1;6qUHaVkgoTsotj~1;f)i3o zHqy~4dYDsAo739MHie`ZQ=x!oUsklHICM+mt&x|Wl7%kMItWKP?A*T|Y0@B*7dqq{ ze?*sc5L1M8uo{hUppu+z1CmcjDD+~8RWDYXXIWDTnW3~D_lFt*zh#Lw+<3KhFJ4Et zWtLz(PCxO7aqHYY&k`TA88&BiDL57B+9|V{JSelZ+rn~~8-C9|$AF|dylGuDEPp$( z6PMc5_EE!fzUO&_&in~nXXJ(9c$;GR|;R{Y@w9-?KMpn%C+;PUxQ=C zM#qSY<6EY`sNgHf;mABX@QsoW|5jdt)5WZ>F&;#G1;%@a+2)fW-rx)sc5S^V0Pzd((UKtyDjq$1An0EuDEhn92Qg}7A zwBn-o`wDPUCY$iWuJPzY-uW8`435oOxV1gwD2QN6G>_xjy-$HJ^b4^mn}pv>lqY39 zmR%}X`4&mwd_4TD5Pmop_*PzUH#J94uN$=39tK`Y5oSmjt zg~}}TE1b7WFP;nt(#)vZ7d?xk6bw_YhP8KZTXmXTSuDj33_F!yK-)Ny**b|dH3$zpZWYhBoW zy2{K*deRdj8L*t{)t@g3v+zG$om3O}-J`&4Lxtsh?w7ii)WmdgC^powHYq=;(6xBx zw9bvbPc-wR!j8c(st+eOD>(h2PA0R49%pZS5+z$|~=NxQ@&(eYYM}w$;{R_b~HGT3yGvcSGx(m!BrjE5^SH z70d{0B|y@SiW;RJ=1DJXaBR&ngZr!p7KRS>(a2+EEPQ|7brJXHslr1cmUXAzjt$9c z!)JtkuB49@4dfZ)EB_WEe&t9375^_Sv3CFl@TPzNAd)__r@r{hlo|gRe#lpP^&isg z?_aP7XZ1QVy!)}?0|b2J`$fuB^sH_cMUp?y$)ZyvOFeHx{UyGm@)bRwR{AKGvV2e{ zPL=JnNh%xB$3zK%!=HH6-~D0{A7FQu`?leL_}b@G6<=i{`l|NWadQvAb<qTD_1R$YejU@CBh{U-}|ZSp#|D<9M9{{MwBDQDKwWh2o^k#Zatz*p+Z} zhc6FVd+?=cXP(6le`kTj8+3}Yw-YNk=h`B!&nhM;cNlaaXXhv0?W)lL5#Q7TfQhI! zop_1F=eT*I)8Y`j9K&hqLnx(X#BB0qOLv5Gok=LoBR*TmC4w2!{MKC^z{>4vi{93DTmJ8otcoH$-lctgKy zz9H6~mcL^jH!H+b<(xl?Ixmt@PywxQw)Pq0nKPcd=)OeBN4)Te-jeCg4ZFHqKS9y! zUBB>v?H!qC?tFO3_WHJ3nHpcqy-jat?pDPYI1kg7;(UDBC5%&wJV(_ElGkUa>3Sth z9(TueyY{Yp0k*oti12gwRh%((F{Nh#oCYdoD0shs$@XZJBiGd;saRs0TuqDv`3>fC$&N+mzS52zm*Vqr< zX&&3_J-WB_H9Itz2d(YEW#fPRYmDR!6yEL@qb((PV=ViyEYbG29mN&FOIZcIsJYBi zInjrA>Nt!`{T72&iOv?)ZW&k<1L|o8plYSTwHb32ItsW@e-<&WIjM43)A=C# zLMOAEJ;^&0Vr!p4!G<;#HXDk1usyslMgcZCcsT|fN8qVoHK{7TdO&Znj_DQeq7oxL zT_-*K&U)Hg!7{N*|DPbcYt5EHcNSqM{^(Z?HH9KV5iZR;0a4Sz3Djh z8=cuRihq78m(j?(+0N=c^pUa`C=Alomj^#z3<<`K*w5>hSYy>2ZKOv2JRBY7VAUpK z?}H(B55ut|T)$1xFZm0V z{!E>jnR%vI9q`K3Pm!qI83wtmN1gg<I~GmDAb59yk*}q4x_h07*|jmAFI+krp+c^QEypPZO7WutM*hVQ=)@pRU6s=Q%qhgcfcJP41>&PH>6B{1N zj@TR#Q}UawtgNJfDnj_=mHGU#9ZlHeqs_TH1T+#;%5Uw~cEZ8qyjh@bg!(nMHRA(X zEtR#=3c`Lp_tq}(AG>tu$<}@mT7cLD?HYU5(5l$fxqokFZ&Z(Q+56s>fBrQ(YfEWh zo-&!}MyiW{jvUgqv=`Qv^U8a8tK*dC{JYDJ**%dEdUYL0GEZ;yas6h!uRSCDKL60= zmm>uX>;i0*V#_*=aMNPqoE} z;Hk}!-DW&P1~u2SdnMCoKDYoMHK{YI-|$mGUVTKQBohg-j*qT=a(x$4i- z#b$Gk$&>83n#P!B^7~Luxi_DqumSPl2%9=Md1WfG&TAo>DV}$1=w%GIo1sbeLk0j^ zOFlk6vL9@6=!$IDYXXdl&4(DA&;Y4H&}zyzW{&hV?cN}hNEA?i_V2O!sy zUo*-4naDXt1%6`9ayOXcvd7xRV7q`D+M7ZV`$b}=o(D-9qC$S^kQMl&6dg{#4%I&a z`|p!Ndi}6MYyL5ZeR;cHkQ{de5$HpSFYYML*viB&tz6<+>BD%6S$btV*eO2Sh^;Trh1i;yds0HoJxow-B2#pVcd=Za@#jDZ0 z6ox;GFxQ0z(I62}yC;F#eI5mrT4Q=3jCvLC#TQJ;r)a~_j-EgrJ37RIbCqYXmfJ>J zN2WMq(D_pNtm>cBo1v}lyLTl&S2*JUQo4Ud=oc2T+;w51!luCw%ek+Sa2U07_&dXU zgkzFZ%o7}*PR8yeLv9m3W@<(<8H@vrZIh^QNKO^d5ZTn1F`3v0iSmb@ z4qC+sZGRrYu&C$W-hUGKoJ&lJgY_GQ3)3h$#`OD8jZ|RR&w$2W#In{)OI|^N3d&es zU_q_Z!082`EPw~!ngJ(KY?H(WWRKY9TscpK1CI4IG*H_Ipu`52i%Kt%7+_8B&O~uF z?*hR^h{xPnS%Z7K70MD(pGQKnawBgBX~xMC@SQOsd@Ag=ypgkJDuqZdeTW`Tn1jH|Mr3Iuk?hZ!PIGwh2N9 z!lLC#v0)lP*PPC@sV8f&ij5|;K4OXuAa(c9`|rC?S0!B$^46=BW5{mT#;QroC`vfH zpE9nRkvrDiOE4ovrksTZG^Tn$z(uD?;B8P28aB29X=!F0x>Q5v0 z6f1>6Al)VqPn>6rJAIT#RSS3vQmlg(3`-6hEd)Nuq#3Z8w z*L||W)PU9}>jl>$$3cQ(aXM{)(I!b-l0?l{9n-hi#d3xgq9%o!ggOprC8hNiCf?1e zBSjkCjWDiMs+61e9jx#Z$LV!6Onc9;Dk*AcN~nytm@C^ql_}Tf@m!Fs;n1{D=>DNn z^zTgs#HN6?$6@?i4%rVifgqVsouhdITZ65BkUSVp5A=ui8!DF0+?H9lLT~XHARc`e>}`I<1Z@ zn1E&q15yci?rq*GhN7^Mqcb70)^|%1|U6X2Lre+mQ01YR|1r$xS!0V?_U5 z+wVtf#PzQpX9bUCkWuTLsC5)|Yrr6+T*kh8D^dW$zYFW|HNiMPYNPjMYTmJ6Q?4-< zqlB;vBr(IbIzV#yKo@5f^QZp~zp7tvDg=exA~~*UwLW&v#QLq@|HY*=zD3WsUz`UW1{gST*|LnXcw9;~VQD8ogQKWT*n(Q5ed)_=pAnX<_qRCu z>*!7?*cE+Sg8Q;wtx{gM>Idm9!glyu-RZjzX(r~?ZdbPYNPzXhiQ_|B*=ks@8pqo< zCM5Ci0Y>&+o#YGBbGp&Cp>q1CJ)Ks02EASqvwc4xewqPd1wrl&`aT`PCb2-3+_^Ib zo=>pv`~_Z&BotHs=4Dh;Wq@+WfI3LFG&cFQ*U#U5UAzu_&Ya0slMwB6!P2G3>8vFk zH!abbAj1>pKdL{cP&U?^0%D;7b*Ai&1p`TrknmEEccoDB2&S7Ju?YaYE!TMdLZr-=hwbdw zF=6#QcuN)5&h;aH`1Y_K6^FdPzrKmzol{^;ZqD~Ghz)QuU51T6cYy+*>*Nxh!^<6? z-7dN!l;t<2O_>J!iQC3Q7kI3_x<{cJn^?{6iuRi}I#3W!G&NnBoiWR1vz2Q&lw5E? z86*mOz`~HqXd$PjrcP#g3lMnS@Zh6jFDLPmQ<7RzPLpt9eS=w4+qn^&RkiR*gIr53PV-Wkc4P$MhV-)9 zrrwXY*C-VX+4}yi#u9V_4|PLA;yU_ppzOiVH!StyrH-TXIXk>WDg4}bGv`7Ckgx4@ zYk-z+8W4C0DX(KM9z|oEa+q$iU3A0>6;}Du1mxoLc4SG;Om}Fs&w~O~XIje~Oq>Ow zv$vX)`}lXK>c0QXZ)*&$#c9CP3m`YzM6jOg)9+DB10eShPe)P~rUnK83`(&1rTzw9 zXEMr%v}E!S3uLC${aM41-_iPI^r?xw}j{E0T*6?E5nD z6l1FoQ}G3=&tpqUC*$v?RquO|2|M}SjKMHM^2cL}6tA7iypLvCwX@+3yuLUSq_bF6 zfBpsnTH|pwJYM6zlvRXx=cC+6uJc3HCSeIq+XcEYdwK|2s9q|?vcE-29YOKp-7GD_ z_&SLVLD?h#guB%>z?uu8+M|}ofqhE`K;`8bO}~M^JVM1-K8+gIhG>soq@B0L{*DS; z{$dODcS#X!A=$RJaNT!-`nbTRxTXV8&q{ubSl{lVQPj4?cz3sl_OXXHu@{aBs7)BX z3u-Lv&23(~P2HN< z@2p$a`<0lfH?M;55ezzNCmTe+X1{PhvO^M6ygA*8-aFjg9T5ODy2yfqi{zLo2GEWc zwmVv`AN`Yj>>`I^e|z$3?<58xHeJSB%!iET(Y_49Eo%xdWaVxE zz?G%SnD5nAS!68ZYDeJ=ph=Ew(Z707d$QVHLwjuPfnywUb52jd&ErxON9IEB9H6V< zY!^-D`qf4#)_7%d2Nv02mao69Hk3iz3*}@1 zdNXRfP{bfDjB#preWum=kp^{WFRX`M5sF_;8XkvVaE@e(<3)lX>_J)@eGgPu%D8MX ztQ^YS&8>F=a27|TYj%e&zhD8o))q)P?C($jRS~|hr&~nIjiBigo3$H7*d+BsNrR7K zC=Qf8P&>WKGXg?I0|Sv>^Y#OJyDxve3{4brb!ZOM zmOxQ$$8J~#=_tR-Er*ah@H>)}lgSJZrS;VhUQ+0i>x8{1j+~(J&6iYIx#SN-8pg?N z4GCJUzYcTs%Kc`P(aAo=Ny>19l^xu>qyy1=It!p&cyH$*D5x zR1kZfRn(s>s-tE#(JP^B>b0OMO60IH1Wv1Os#SEqNF9hG>_zjH&G=0q^hMno@j) zYL)hMgocG7IDgeOO`_%P-vBaO4mXe2JY&34Wwtv++q(NLOXenw3CH7FGRTV@xBCxh zU-R+xtpn^=?&ET!Te+A$T%L|$w4!bT$0lMThRjX!+mNuMcYjt@V#W0tu5bGQNg(my;i>joFf6_ztdj_Q)((JH8WSMP z>rZ1!tw&HRDf>cXi44bHEm~|dN*+42zMO#XMUu(ny>17iC$g_UOLtWbxr~FVUJ`}d zVyaEB8ch*FL}{@|nAFF{{xZ-`rEBm1{t@ik_h^O%HS`0?Vf5Qk{tMl25?TuT

U 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

m?V@`duJ%u08j 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

^;lTndw=k?wO7Vp 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

fGF3TzUD&U|_QiM$JqsA(6}0 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

q{*LwO*5j4_1wP{?GJ_ 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%0D|SUS+aHp24A7`@A2_}F)=Y!$S3g&^7DgB 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 z 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 z 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 KL{Nq-9PPpd&w$&^fQy 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
I5*iX{)=&PbpINt`q3 zy7#TN*X0nU+kU$1>{_eqgiKkAnC=65;!MI;8`2M{OWON{CkY?&&REEPnr<`we__%G z3MI%Z*IDhoxBI7=%MtTmXZiHKw22e+680qcE{8hm(COMg3m4T~vJ`yF{lHi9Ea~%; zv+ML0mWfQqCmQ_;scrXt6jj-?pZeDe6Du>zTP5zEG1pE7?YgmT>F#TegQ<7Xu+L;8 zt!-sJ8gFUa=KaD<>5kC96O{koOHO6}1AEQb+1Lc^@bB<;z-3z4D7jYswP7?$uVs4z zm2G0tqVqvhgi`XPA1w;EY{~k(^*vM;0e~!7fy1^8GWh%V!c(PTe&Tg4VUKOc+VoK) zK4&*r+fU=3XAC;gevp`l`n)vZ%e8cFS1fpdIX>&neR<dgv7TPkpk#D?J9 zp4@Fyy~Td}VLHY-bpeV2<|L$4b1I8CmNYL@z*xY0d@?yKgLBvcGkCqFcU;Pxh;4C$ zs0Rq>=z1Psuuaz?2%68Au~slmi-+)b zxGcZnI&MLmRxA&Y9d zJd^Wbh)z}S%~|hz5`Hr_KvVtHJCXO-uEQ8hd<@(((wIP+<#RT~rKu5bR$Xs?anaZR z74D^g-`q9(&!%@gZ;{sf+vaNA=EMi>pFhJl20JWPCn>^_;a=G=>fBXX3gV2)t%Y&4 zQ+Dh9M8Y~$Iykpr=(nBS-Ug&F8EO>x2l?fhFg27*T2I517U58wT}L zRy2?duz6=*qOeY|030guETs=J%u}%UWOU8{glN1;n#dI_aoL7g5;|!4oQy2D1dClgp*swq%8 zCoq`BwHA#3I5-2Fs2p_SM6AwEp(#D|jpYuoo%`t9tdsruhRX0bp0R`a>BkM)$*D;C zOkohOhLM(j1AtR|;O4{Vshp}j?_|CDP*x{6_6{+06TfT9HS3)vl?j733rki{U7lyO zj-Sh{Xk~k(4u9&3P!Ux{>}FcNz@a+`)io4jyIaW1=hfEU^%X30nfAfaCAF<9Z~L#<_0e*3nPq}87|9{+OCpaZ*a9OVIW8q8xM@rA zRw{DqEUV8?pXPl1Y@#YeZ7x&x(0O=P2hNC3vR06)L{c*oIAkzHcFxG*$yL3aRK9wQ z3K)~O=Ha><0@<9mxK^VUALI)vN*Y2+#_)M)Rs;pMolu82z9B~`Q4j|?zmyPf2+cQW z6kGh+$5V7nWl&fKB1$Om%4H@>vsf;ehZ@8NY7w1WN;D3h!hide@Y4$vzHC;%Tn7>P zIL{<5-9Y|Ycm@~-MLmV%FX>2B=c+>a7OGEcIICH8m6d_;+R6p#c5B?q>zvy+YKDI_ z$2zTT3sELxdynpq37irFJu=L_S6I6x;B!Ie>WCZ`HrT9oji6J`LYL8JgN*#073!dR z{pr<7!c7sRRg8AOl^V7;Vl&lpBGB(ISfgemNWG0boOul~d$Wv2Nz(;G9dN1Sggx0z zDVNcsR?pHR7$#}SPxil(p~J?zg(TFN4D@Al8l?A1BZ6ejs$mD}IcMCn6AGOWlR+c? zdq?S&U2s6S?U7_N7S70~U}$eZSVFUC7IhjMn^W}Eo?_-`)ld%)`gi|qhYp?x%>g;p zmz7@UBYD1Fm}{bFMj|4G<#O#mIDYE5_f>K6!Q#`DXeJ{b znSFLcNI*{Cq#S2yy~aQYRcKe&5Z2g~Y3-61KTon04)EuNn^o|7?$jUwF=_|}VTX^i zb3$@>OR%Jkjm`LGEUaKb(Y&^%&7?IA<#FVFrKo}_@}T3~W)3*Gbn2#YTl$kbZL56G zhqBHrkiD#3fuj_JpU6&|jI$;0R*aLP^>QFWWiHs9gh_- zvRtc)B~$B=)<;KV;_LW6ZsX4FeLwxZcZa>CPp0iEEWG32jwI<`gF4r-|Emm;5tD+P zJnmUNdYMx|;pWhBAd!xi0OGSM#mXPs=Hv~dd8?=IujFm*-3~-<|21R5P*dV7wG?g& z_uUCMXB8ZxIlS|8PZD!~6=Ylq=Eu&;|hVgpc;$uGbjN=e2!q+X?3MA)^b!>sJ z!Y^-H>eTCOlmDU~WW$YrB z7ow2uWnUm$prMt^50Y3m#3FFi@L`DZADK0_S!FM-th_zup(|6=X{gc|RV17+{JXsqT_`Qv8 ztD*zAIO;q3qyUm=~>o!@@XhtCH*aEiTJT>T{cZXG{Ey6uK@?WrTA>v4U# zs)ST}1CpXR@9SBHvpRA5&8jRBpV-9u@4Q}V%beNm%NuRf%v!i6>=Q$WEpVKW+%r-y z@(laC!?tjo9PF3xGas$a<)R2HhlH9J>C8`p$d+e63JOT;rb(>&wQ0n^EF^|)e0 z3E6a?F?vM@FL830K9&*&OErvPG1ZM*_Yy;LyvhY9Zekj5SRuc zvUf?oAK%uJu9pWseQbG4hBetQL#h=`k10ff%%USLiDv%iYqGFdh~;4aO4qsc(O(Z# zKy86t9Dd>)^a|2T?t=$fGf(ZmLXQgbJm|~YzOacvYs4-=`}7z3 zNtfi1OLo{xIe58IrFe0NMd*?h_-%9aV@iXj9#5LV?bL?~-Q%wo%?D1)iwBL>>t}km zBczd{h6JKuuE;13Qr*1q9$ot>9ZF&(o+i#fazl6^Xe|)#g)_lg|ETwhb*}Z3RI)R# zXZg1fsdf8@Mya{;p&)lH)@}MzeZ(-V9UcIqG;NZRgeKcibYC-q1lFvsyS2qOy<7T6 z9~{z9!S8VJ;=D&WJn-}=Zy_h#dzr%e4k;B1FyG8Tap^szI83m~L(h!4Q-Z7Y15(`c z5l3s6`5_fTVMeE_eaZ)h3C;A9%3AL%UX?!8daoJA_#kOn+&r>-4H5jM+`6tgy26gk zY?8~~-SIp}VxYrTt!+t|Ozv7@8i%2YEm1Q1~5?+-`#$2v1n(vGT{gy$F z`kdMg^pB+j_;X+HQ-$`IFo&ndUs+aA-S+nD|i`b^y z>hIKh{BLYG63DMR9leyqH`>Ab3LF(2jRAdJZ<8?obu3>k5Brhh5~#zG?+Za5S|{Sq z6%X^hmE^?7ZfjHghPb>4u_wmVS(R#%MGz9{3PEQjk(r(>WstMdO}ipl85yidVgiDs ziPKYSM5!ZucAKQ<^mIaW%0P;w@IX?*QYE(#-%d6I!jP2xKRI=b_C(m<-KXzO zWBQG^-9DLXVGN8Ig@tWJbG1JGbMvF776WQ=?MS9Cmbn&Nq-rw+h;YH4{(@>S}eoNv~h)z?xu2FJDbpMPFr8U;HN#~yPv&f2*q&Hxzhxocp1t_iJ4UJOOI3T>-Vzudn$R z;yt-Ec(Tkd-MQIOvWE0T<+~uCLo;iVcbtS1)T`h1wddR-d#Nber

  • xMk8v<7^@g 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

    {Z3(`}E4JyhutD`Q9?N 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

    5Y)o>`-n@LH|9L}SZUmgC-i zrTm!j!8O*_H?-tCxvQOmP722n>Wp3Tt%-sPTPxBDWHjIRoz1kc)o}-�=X{C+f~c zux46% z5byl%IL>=h$c+ZHk-P2^+){zZhVx9XiW~2?Z@}q#w}nl1XVW99Ci2{hs!cBQ)jm24 zI1OTEk(sJ9g`D1Tuq1gybvOSVINk1GNUA9!`EG9nxCGfb17f7`Gm#R}q`Lz4DiS8A zAK{}{x^IP=l<9?kITa8Gk4wY$%XcftQd}r5CbLdrXlq`6XS={zO$Ug+%A8MsQmj-Q zw5~iSuT5mW)G3i0YHtlGbB^QA4GpA~>da<`R+;ObV$A;IS+#fhKii$-h+e-H9ga74 zm#)io)b%+mbeQXVOeLs+MlzOfuIk^SS7js``v0~5`5}~w8-Gce!VM+61hIY+&vJH{I!DH|7Laz4t z&SJBYGHNy8_uqfFy{fFfZBO+5q^MEZeO8lHlp6WKhZ-iEBUwAQJD2BcR}(kPm905R zVVHYwK>T)g_|u{oRZ;%z~-q|lc`rGaUj=lM7OB|bC@Ms_^j$?496LYo;r*xH_y?X zhFLCrfPdqhDN}MVioJyR+gd>}~^ANrjSdB+I$4_G?^x;JAecdkLrCvm5m(E%aC` z2@|7R{m}>?Ea%X>$@6;WM1}8sseoAKN~a#tOltZ%JfMlR)*W4|cRa zpA0m=J6#p60Y29JLlzHl>{KAW5cCu%y@Ai)>4oQ;4z%3ObBz7NY>}H3uA9(N4IA<+ z4mXafziSHV;%+rRN>Tbi%BHMTaOQ{c^HP+u;pcJ{S&1*VE%Gli{u-`8{nyYRh|p1g zzB~N4jY+Dk3C%=Sz&1K*7CL)p$kT18vE`;{u*jyS<*lVUXU+3B<%LDfn;GTzGwsFKFTEvVM>lg5VaN`#I(+o2F2keB6Rh9GcE;@9P7jpGgdHATHVj(@MLZ7PbEC_N;TwTuGWE;ixl@CO+DI zBnaiIEV(ur33Ryt$hngxtz9`+Qd|3tD?2JO^5i%v&3-=fEXDzF9Ihx@Sr|zG9s6rG zuF;-s-P=DJLb%3uc9cLVAp|1l(!>l4E7uj$KcQJFfJGN8O}#s$no3NRb$&wwM22aU z&&}rb9@Pd}+yRRM%GP`77wXW}JFroW!4Hp0+CV}?H5VpE=Vv1rv2wS8Z5!=goMkwA zF1HF6SXbN}Gc>Bn;krFk>eZ5wuY}h5G@@AUXfmQLr@cbG!ATM#nBR9rJC}+ia*g{% z3wI=^_wTBp7}J=Wqa|HZnzL(8a#9rq*v2h_R$`l7`vk@=`sP2&e>t=KgIFsXH}iXp z!~o^&_Se{wK<&Jpeu{Sjp%=4-a=-=;xGnT+m+%{aEn~`U6jt3L%azBwQl&ojb?bfa zx8(Hnpu0Vlw6kmqFDuUn9+JPae#=EsN8bIui(;7kou<@>iGYIshVR0@g;VCcfBfsB z?7g+s=tJR6z6*Jxg|Y-f*O*2xUqDJk7+sWZN%?!>iD%Gb7(Q&ugbyFR@+q;!uZQVn^u3Gp z_3XunFACW|cMvCaBrv}w;^6fR1Wa;&vr5BGoXflEZW%$@JVDfs`}l&~f|2HryW?Dm zYjN6QoYDu&`Na&~b?g*Nbj7oBNmKX&as$QWs$NC;Oz7#uVGZ{MWZR+2PV8*2e5NL@ zR3?|fnfYBCmsV@CP<^xI(mvbU|0=1Uo&A{>nWAOe-CW|{oE9vu4+WhzyJN?WZ3|i0 z9@gYc;S&&OXAA=9l4N6OXy|E)w$Si!Jz>Z^=>FNl;kSv(;x?|X-4>hb1_lO4P%0?; z^T zua%>^Y3WHrL&lQV6EZZHD+TXk1>XwB|G+<8ilIn!3qQH-U^tYscrkY{e8kAYJgdWh zjrS}M|M}U)esk_;j&`__nHLQ2c#w6J{^r|b@>TfFgXHY0vHFg)C~ldZFdgXDN<`hL z>CTd(iI);4rMH4I(yPMf1qqdDvQVfrI>EmqrHGoH=)n;8@v-j=s9e+k`_T97O0LhK z`oQ$T94q$9W~BMT!7M9wQOZVtb$&KO(xbaJWeyxNt911Tc1p3dO|k+~4CR)oA`7;V zMRfIpiQ}T2+Izsq_r25`K)rng*ikZ(2-MX5vL#&8`5xJ+`-rjVcmLTrSALjjHu>TH zr5O2hD>=L$WtsNtghbeWN$|+5h8^qs8Kz-{vZf z;I`cnh-<r0Z* zft5-}t#ch`F?`XS13hVP=t>u+O1Y(6m1UZv=Tj`XgLicsJXz@y=zqyyIc# z7JqsubJ*XZJ(k9iNHUXneY6VZ;IuW^1W#SNGh2D*h`x!`CXr3^ftoz$yyv2)A+WbG zG017YC^xfNg@}jYu<+Y>vMb6wZeyyn*;S%N1#;3DHR{JR5=U!wZKZn~ZMdbkR~hSV zl>X}>|NS~Jp}mgJDDOagjTQzY`j{Xsx;CH}nCLTK^Pqn;I66AMehHo>tQEv|Lnbhu z6$4u0Ud!oyeEgx2-S^)X7M`w8wr{V^&VygqLCgk-EARRG^(9y0Q3k-wKg#iC0@0i2 zvH&72YSDD=4V%+=O~L?>@5BwD91OM8gSpo zBqh{`q#f3tcY_3DG>fpOejY=$98-mDa>x>t3=nm+$E8mMO?fHnQ;9T(*4)}VjW}w_ zgFe#DE#nH}@xULm57r+b$d&cC@Ci!jaF8@A-qu{y<6VxgWm-u-R{Dbb10V*HX5jrf z>^`rp{@xhiO#BOQh#RC+VwAbh`fimhywH6kxKJX{du8n!K3#Gs0QIQG`e6wG0e$g^ zu0AmPw70<4a2}|Ht!iB$IXB15$p&3Ze~^U}L3Wn1Q;o?d3D>#lsrx*cl4gKSP$5tDj8S|-=)Pkk$H6mNA$i3gmgF3=T(4Nzjc{mLWKPEse2Y97*L zSdNJ}g~{H7I5|Lt7aqvWRHq3btc2n$kPf{$p_oER%0kJYp9C+lyw?Sy7`OLW+54I8xVuT)rfp<* zU_>6t2_t8r+toud6Sw&1M|l^XYKlDD<-mfx zw&qC${ zk-No{Elmn>M%gsCn}7tsNTrqbtiGabZ8YtYdb^5F6s_nZaqLvKZ72MXcyd= zSbdmwm$Sf465mB+Y=kIb=CFowO*w5m$vx5n1`u%QU!_W~AeKxw>KxZQL@2YrcR=Th zZV1owvcaC7yw78kaPd^_#Ki-mNPbxRx@-Ht1-p)3zo^4xz-(I@r;c{XZ1@^YP|7<6 z#^biOIYRq|0ByKX_>0OZE@w+n89MJ=5-mc0dcmG0~Zv!ajL zq@Ikz6kY_w>yyRdd-_AM6n&|%Z(_>Mt&KUT@GvRP=s~Fp*Ku?icjSiRj44ESuahyY z03J1H$US{2<(lnf%nz9<3G^MyPouMJcp9_xn4K7$MQQn zUYy~`WoHO6=7&Wb1Lw|=$Z|zfmA#eTZMYrrbFGpSi@eyk^A15d=B|_J(|!+3qG8@<}j{FI|Noo#IMlsjb}M`EBgp za|oI z;nt5fiq~VaTUDVfa}vygZ)tqe?bt1FEod2vI*oCe#Z>6bGfCFr;iy9Acc^kdU#(?!WXo!XpCYVUICeT z_Kc#TzM)f2wd848J*0j8SBPhO{>UZHa>@+meeMIuSrRp1>V7GBRw?iX@I5uzjGw-5 zwPo3-9P`)XtEy>xCVuwaRaMxr2!+7^?y-M<{2Y1TL$?SS;rwIQOrMj(`t9NSob^{q znI>MD`C**I&@jyke4IYBf&Ol{`0)XZy)S+I$(T7K=K!=UK5*JTmVeBEAxe4bTT&nZ z29t~aZpL_rqr>4hDoV(Y`aNS=)qogWjt?-f`g&1M>+VSLPPuE5)_$S5g9viabUI&P zEYSzV-0K^W8WjXe*fl@DK?M&*h*P%oJwnTz4FnP1W;1~)B!d*p^i^=G^Z3s{_?IdZ zI=tO+_dHirct^=V{hTQs`&I^}+|D8Z0-b9TziQeVG^k#q$1rYL-D=q7f&gL-J1Bw^ zCtajGY~H~zrs!E@|9z6ze`xazAPnQmsa}X$H`yR$>W?iV7o~zElz@nQ@`%gO&!1P>H0X%pJuQWV zv9qJ&iif}Y5bK(ZOdODVD?W(JFDQ6T-Ge)V{U!M-hdfkjV`pa<1e%5Oz$NTtX?cDf z8>BfSGdnXg*Agq{Q?s4elTlEr)zuzYMtR*0kM(_s&>wl^ z#<=RB_gkViUG8Y&+hz5LBCP*!^M{w_f&ZZ2e)jK`uLGt3a@lw(lKsPcVEKC86I@`yRJDJlrpo#m-yE?8 zNtS510{V5dZj7)MI#r@bHdo96#E?y!>cfn6jx9U^pgGQ#h;y7_WMP!zROOkE=K_yI zozhfXb8f;c8ESjv?RU4E&PxLX6~FQE+TP{Azwkd_eDB2F;ks_}=uQ!4Xhm95Z>O## zZ`1U`1(U^FY{A9s!-h78deo%Oh)L0MFDt30ifiU4B^j zFUvhv!f{Xov_TaRBW6?7yH0SO9Pgswa0~wHD}A(lk2oyS@1r7TEi{fzpWKbWIgWWI zlN}ml<4g_A>nELpIPF$=^0XnF@$uY7#uCqX9?G!bDl6O&XzNbJjAdWd14bSSxF(hk z{uLJD{tdlLNH`OZyviaIYOkzK;2%Fwrd}H_Aws>hstfY7 z8;ogwU2gg$wO~`%qZxy_;Rhnr>6ZtP;d3?Q-TVnwLDkb~_@a^>6G)^R+Gh>^G0EAx zF3)?8vfYdFq8L?EyH^8RyQ#&%L-nn*^S)DEQR$#{wZMMiz`#I$AWH0}j;5TzxX&wW z@=J7P4A^Z{eXFnEUr?l}g^EF&O-)(Gg>v(j54fR~<=lk+Pbbn&9W0kD7XAh=#_ zo#VTA5Zv?D8=*!(Yi|k&9mR*bz*Fbzu7fDK&MMm5TSE_t61{RY0an>^ETfTG9nJ8b z_?9TUb~8J?dEb7g(aM|ikDLCKA|->rt-9|yeQUcSF{RR<$&SA(Dj@(WcrW>_#AlnE zJ#xOsls4V_3n1IXdqbhQ=QE%sjoskIVN&$Dk|)o zI9|fP@AvSvhW|^4cYL3>pwkeOh`1#I+nju&_6f1cT3{mlS8JQ9+e#!+rHgY+gw+Y3 zP*>9sApP&8mcNY}wHfOCRlZxbws6Gwf)K*Laq{Dck#`ziyz4lH;G%iD{w#h2I)lCO z<|7^FVvDtc_oC*iPKQKPz^Oe{YX>Vvfxr8BEWe<=${eyVo8)Lo?MaiWcII~zL&IJ2 zqs6KVVp&oX`BJtMaBmCY3WGk?=xyiiSHM$L#Ha_dy4jMcfOa$|Ml0vyCL-vmv=6GD`5?aG6q!BMLx?0 zHO7UJ;zQYshDR(`^^WkEKu3lM4kU_{rLO3?=2oK=-=&NIvXV!p=pONCEI zEB)ThWsD)ucU6hOv)l|x@ld_z(aae629FFD-Rv8(pvLBh4v!>ERX{Vra1rCLl0Z?D z(s$Hsyxs9zf~SEpTe4e!(q((+?SEB0&)zrJUs`jlN{P%s6leuV+t}D-qd5NX9b?lJ zo-b*b1}Cp=|6kZNgok{j6%>Y7-@o-&gn@h4M`cj}{-^T+0IPL9~|_1vV-93RA!uV%g4pyo6J zOvvry=f_1v$5n4+kr#Pg=cXF}b?5l&tMOgwM}5-YWVxcm3(r%VeAF$v`vMVxn+^4s z^6A}$<05x2i$hEmgiQh(N*+`cP&F*y#qYa&R7~QO_+08p)hS$ZiHFpu;cRXL#+8-R z8@V3~PlpFhpFz8$8e2BwS()A`m$I6)`YK!M{j4rz(6<^~jTw?uwMb6ota#<2ER8u* zixd?j5D}U=YLiN}Kbbj*E4C7$sx$gsVv&$kS-YNKUU+%X^oI)GL>9s&iYmoY+zXM^ z^zBxeVKu*J@ne}=w;GCv(bD*& z;Zb2}C6=Z3;1)HTFJwa%(_HO3*23jzID2z(=W%&Na^AX8eq{?%)TimfYeLv*z8I+( zs}Kj%#!-cX#p1?>5hDst2L2`NB}oTPAo#_y=!2xmw1`)n3%#I^b|9joMXI9i*1I@I z>Z>JH(pxvv#=HG}&}-#tnJN)>ru`j22|XK8KO1?cLu@vws%X*1jQ@TAzt*?hF_274 z54rT?We8W~I%xDpNw&-(2xt)31fU-DFa!Z|NLL!Ha{rSOO`x${CY`Ddj4fa|%8csP z-Hj^+{uW6Y<4Ui~V67&X+H}k~YXd-Nod?K@fYo?K0z0m{8yJ{Yqgnn&niNK05P5u`GGH-xoMk{-)05vnRrI~aJsuM?9k1~&{opqr zD^>c78pmFU_9VYYZDiq7V=#$1j0Pq9j8UK;KG+rhv!ocX#)l zM{5-~oW)io-T`7qwM@Q{(?5#$Uw1dyB);*;&5*`25Ai)=CZpuQ#zUre|RIirGL62MNseE z-H4#s=NsRuD&rGXWaqq$$iWYU{S7>^ZWT?OjO^A-qU)l8DM|@ZRY98DmdsV~rz>Tk z_NI&Y{%M&R^ua$KBQw~knGa>6 zYM{i$UNL$r&AMvQbeXb+^|iQ+VNAsjIpt-pHNIw!%l5+;`2=~`d3rL6BNz*9*_S2; zR+LkhPDi_mhz?#{NlBk1q(z=nc<&ytZj@0>eYi3zG#kU0eOhX<{`D$SGpAcYu*3)( zhzernN6m^_MBF`-$^9XPRT4%kZGLZ2qD!#}<%_6jg-SvINYH{!Xn}jRg67r}kx04{ zp_)MSX&d&W%(^b}wKJP>&DdB2ehCa|;MQhlhnvac2jThy7?o}RygT=h#~G_HUi>mV zGSa%Keo~$C=`g7-xV%ifYt}7+7x0Hi;~4qNd^Hko4`)kL1Q8S2Ry0Igbp7u3+F#avI2m|u$ zuTk^au~d;FY7R5^fyu~y=}{A;?X+zs%H*rO-x@l{iDYWE@rlo;6R=3DE|n+l zYNSvA)xFHwWHBYVidW=pn($cph40!vbLnJWMa3Y(C%h`70Hs0yJ?-KD7#|{-!Qa|W zZ9mWS`>C#SG?UVTWELkQ3>l|PHGCTaUA@PUARWClV`a9=1X)TGMusFm8n_X0JGr_a zYmv8bZoKe)#*m_V=?4ya?x} zq?mJ6sSd`DvRYdQnM7Au@bv|SepCZaVRhG90={yliue=)ptKj=eMOsoBwZsFz1Aq} zz{St`m?+hiSdKv-^-FN77Uof78gv-vUaL;6^pVsz1=k)1zc6}fKJ2V{KilCbWa|RM z3Yx**kDBkUa7d4=pc%oXg7|HQJYhE_YKd3;4ImlE?9J$d4StbK<4ISki2@aCQyzBZ zgS3@iazrv563H{vf9gb;pJYht9a8So9VuV^*<)?2MG!Rsf=x^L~{I>Gre!@2uc`UmGz9+}ohe!V1q z?w4Qp+rCI{D9rd``=l}i)wZbBq1AEJmmv=WqmG4^xxy<3XRd`LXbC4=dUf;OezJ=r zbC5>f+^QnAG0hu~jUU=YCt#MGoIDl>rLJxA4hW*3TH&wOG{~#%X2lsW85_;qxvvjK zi;IeouV1&@-5DSqEs3;qu)XJzBXOf? z>;g(^*}B*)Nz}Zi`{E$Zz;~S1LR{gL@)4H4ax4Db}na#f8GaBP$(Q9(&Q zKb^XB(nY1cb)zaN{2Lk6!XScFr$Szm;kvuyO<% zJRsnU~E8`Ho*Nu%AbHc<&CAYb(Te zM>ZCAyC*+ZZBe*QS9D+oB$JkAx!&26%|(u;P;cUys`W-Z`xg9Rhwd$(WiT5yr5O%P=|0f~!jqa|~HTPM1A;x%)@!tXh!MHrh&F?srt!B2p#T&)Y4!Vf^Y&H}o zktq9Q)gw0jYxRow(2{XsEIys!Fm4BrY^9Xt8bXq4YOQ`ui}%TDkNQ*`hBr+i{pz^W zYOlQ!4jZA!ym{*}%f0Y`L{WJoob2oN=kI!ipa19m=)bRv(+3&IPpd~}_^*j-vt6It zk-FzOHr|o=$xu#Y{lfsYJNV-qO^@N=E%wA}%`RW=tvET;ms&Di6CbzGX&V`)KKX9# z8>KYqP_RV$>-$O!^H1(Oj_AQ^p@Imt_q2xtxjo2a1zo44c_sOiGLrXF(B?;Pz}A{V zY}&KJN+oPis})q{ZpATqsH;@DRP(m=0hlIrF}O4=Pj=iv(V@)&>&5)hw;YB|LVN6( znsQR%qQ_w#d+mEE)(G|U4))cydr`Zg*&IOFU^^;BJg_ zPWRD!`cQXsM{pYJw@Z=gMk&RQ?PN`nH?_`u~ssha6 zq+4q#T@G60)BzTo3vQdn3hgV=g6 zUN?ZWcWK^l(E~FvIg+iD91M~6rmxTc+**Mf?u#y>jeqjgl_7&#F{Ay>!mvwDAy@YG z{-?dgIhQC3t_h$od3~O4V!%Ci=zdKV{?b*R0!!bM)Y{E)%`2E?0tid$eqwFW=1?KS?}cVAO!Cj7|(lg5UK;jb59)Z(wg<^rY><5-HP z;<%ejQ*E^9tZMt_s9e`nBX&U6hj^xLWg$Zg;$Sho^N#6*J;PSAU8~ZGjI&xQzcB!q z2xMA$STvWcX(QdC)d%TAm6#UY&Srky5yA7#psRE)w4pz-uc7^C&>x|-(drd;ZAE&f zQmj_wDeCTa$Au^h=7M350#PmIz@_cXl$zZs_W4bAbhy9cA4wP+a6}?WMaZr zy~ut$w>rUtF_SBSKotN_)l6#gC$5*U)vdQkM8 z_^Y0Nt$pbXgOQb)v_VdshT@y+@`7cO)k%dTi6a&4i(VWqcliw+RYPtJ+rS;Q+*wn8 zYcrvqDb4(vwLaD$nR7h8Rh(vY(xM9OuC#8ny6EMIV^F=nhHE?Xd6AfADq_+Lv3RLS zr7CiGrakl@7a6?#Y@W>-J{58mBEjQr8h6yfJ{B1Zg*^tT>t};Cf}5;|Z5o6U7S1}H zh*Y<9bPNMeO%NnCc^m#|JlszlU;Ts^gTW-aYM4b8v1PmZImQ=pu=$~eK1d$9o2y$d z38vl>3_ke0D?Y@V{8668MDhen9BT`gK#1f>1QADIGC_RY~kd_eX1PIs= zX+Z%ANE4|lEkF`V0HuZAYeJD;Lg)!4K)%b&dgu54XT9IL3v(%vaPvI(oU`{n`+#@z z`)y=zDK_6IeRHNPSMf~G^NC;WNAI}P-Zh$SMn;)gt^km~!^j>*W}ZQ^fZBUew6Ur` z3P4f)VSN38l}iGX+jb^p;x3k{zSH~Qx<>Mx%V$!~#rUs0VH zIJme^Yw<@_WP}eLk`)FA{qsZrKKafF@iIX7@i@G^I1?$I7pUoe)?k0y1pZ9al3yo7 zVqd7Gub^yLN|O`eXj{el>?wLtQ-$bq*A{|YE;unKTbpY@FC*2$LF}Y}&U;!>TN;yHD1>f0YdSqwqyq}*%QQf)T{9t*^KMjdiU>`32x@6ApHueNG}Usy63EKdrzSfg zX<>$CqG#}Ca&l$wt~g!!I=2Y{ULPQTnhJ;=-Og<9zMx}927Yg(0q1gsx!T~S=#kZA zrKx~R%>h@MxesEw6A{YjZQ3nUHKd=rE-(r0nhy{Q#04=c6IwnTCV4i|YglVHCp%l* zWpA3XxKaZLNFpOFaZO7+>XmF_o`g_@sM?gkyNuG}qjbBITBIgS$smAC&oba#pGHuA ztoXF;Xd{A(OUEMDg+?~+eT`_Es*6ifcgTJ;9nwkAPHj_g#WmDI=kh=28YUy1erQ6C zK{+j!Wi|TWl3Pk1HoB?>gA_+~^W;zlw4Xh)oB`6?+uCLv)e8!X?m}yZbEmkN22jI? z0?Gmat+tZ@YJr}?X%M+?TUm2eKq#>dC%}wi9u&5KR@$kn(WPhl>DVphKwN~E3<098 zC@p^3LD83#dmhR`S^R5lz!WxoOvB%5zi}*i09dWc_LN#a3(nBZ&ZSGfm*kIm^f^+m zLOtmCd)Ty7;ZgW2z^ecTheAmcXN*Y$zfJveNhEF$0Qb_^k zKQBq4k^#r=twuVbbb-F%Iop~3bOdlcG8Z#4$%CO}orI|ws>BM!6+T9&F6(A)Yp5ZI zhg0mg5YiKSj$gU95kD_3Z9QD-@y+4HH`{`G8{*N&>Oqqpm+ZYS-dRyS+Tw{)fL#*W z^$dt_@yyiw_+Ia0^VEKzdG;i{rjLHlFNmkc%XysVdqOpQ#u%R6G5U(b!h8Mm_s{Q} zzbUzxA{V;;Yn+zIr^W%?)M$REXK!9~TwQ=~mjjd$HGz$D?b;v-&|iBmwt!m-(e`{} z;b4@3u=1o3t;iSquh{+ff9>|7Vno49%{kfELn4{HFl0375#XZlZpg;0^U<-evu)Fs zFb3I?#EUcIqvs&Z<9d_-%g+a~D@#V?=I5OI=#2L(k zIK)|o5hG-bBl#egtvFZvav}Z}YHlQz4v-W1hOss&2a7)1uV_>tJzl%8>R05lT=&sL zQ%;Z5env>yWS%0~7{Q}Vy>m(QRT+sTe{fZecPe05ZYqEdAU&ILTs@JBlZshN7sES! z29pOjG*Y}5-L5~KOmaAvzRK|^-u~m`CVUz-kl~3LV#jcE<|XT_qI>80)EHdz&Ci50 znlHn__rjsVoLdWS1;U9gri*=J(JObfm~Pi0_1!;Erq8A-2^Ua85CK7RCfYCMp~%UE z@pVz4YJ+QAzgsEj07z5u^P9CGf5Oe-bZ5D0kigD-VcSM}dP6U;%8V-7)VL~#bqjzd za>JD%jf?4OX6}pO3d5g#*B3f~F`c@=yovjmfjXeNixTCmFQS7LXo%vUiRF+k39c-`%j=`ik^K|ZSD6f zrTB>(pA!;Fl>3Y?7^Kl0gLSmIO%RL9{;0)crIp#d>287HDY#TzFjI6f0Wm(#@|xv@ z=(QzYEZXOTrxL1y9k-ZdH}7|YnuDm^8~2SzAP<| zQ^hxdc^jgOBbCW41`y&MFq|$(TnLjsJdaW!<~4a!3Ubcg}}tlxnni>L(391CNDN{;3;s$FU`lQ{`88L9>KXq3weI}Jl%4wONH}B{)XDl>*aDg zYWr2x!7T?+`2ViA#@&ai>5pUH`+B0xux$kXp-vXY-6bC zmp}CE*f9zaH|)CNjncvH#M*cSOh%_lCS5V@^5i7yq`?ZC;p#ISz1`tJd&81aprSS{ zg^Gk_yC-_Sbo{EBzM0oY#O75}Fq&~BIwDvuViW%RU+i(fdNcQ`nWV4OMhA62ogCPIqP(sP2 zm)Py92mT$GcyzDHoNM?T9U-Fn8PJ1wy}zg#*#e}I9ROP!)t6GyBRw?U9vAQh!#j1!>n5sZ}n5yK!wNe8j7Ur`{AOFaI z>a@!}6g^4VeWVfM3+vm-T-B)Gm_uN+}A^~=M4Z{B+ZM4VwWLz}Qbv;!- zRs8CsK0gUrV6=-$&UrQegd|npx<2QN@V*=^_E)D;LaA{xLobn7Z1XbjfE!R>Eq2n; zmBN??%Tjl(ve-EaFl~6K)I&PQX{XMyK`G*LB1_n*h5E;&jq2$diMZ_VY1ev7ty#mq ziyFDQt3M8k7In)>XA1Ps(l&dUzY3TEEoAbK1@0ohxs?G~BXX>-K?WI8Sr~j^OnO(W z;%y#VU|HghpXTmD?#8eAtFPUoGH4m@0+KmsB#=jXDEZC&ard8|$mgmrv8Gpou%E81 zKPR>>ejtL0yx6&z2-ZjjuL)!1_{BK)0fpPcw=lz=7wrqSGT5>vaAmYK_Mo5B=u|p$ z870MWNW#)nmc!-mssaE=<0LA*tyb`($;j0=t{971KwYXPM}e9428AB;cC| zE!nW&ch*9G={1xB_WrC49WTBC(iVe{ndomfW=vW)PwtFspN|(P_4~rDRq#DZz)%S3 zO!^H*eBZqxeCctz^X>g;N~zAI3cbWMdP~ZL|F4ZHx*Cu)#cdZI;y07>+D_ZHs@gOF z$#V~{!s*K~B;1#2HIKG{p?gF8Cx4sZt^PGqQFJpsQ|1b0ZKmT94t{OxL!O^Rutq_> zc%@%-6G&FJV{YzBqFO-GaZyM@qgx!>Z(L|?HZxgLUWY$!f)~%(!zN!#n!W364Uql) z^6s4A0Hk0?1!BklF zj4ouhv+`xpNllt_z*u%>yZ_X74}mZ(!1x9*?){YyZFL!&)|~oKLU$4oEg;Zn2ekm zNb&O5B5}EfKHF~+@PxCz^s{gy+xJ>xot!T~3~cg=U)QLBm61qweMoDMV_x&0^*mY> z(jWJ^{hGI0z#peO3*Z-@%`GG6lxABLM#2C{GHq`F!>fb5Gk`8Q90a)e0@mcEZqxc# z@{5c6S5|v-EVBCqz4x52w0LE}z-H@-T;)y61uVN`j*?nLI6BH@a_<@{XoRANil;S@ z1;%x{`fvMfdfH8I_LuyIh$YG%=_L*Ynf0d~M(Iy2+7MiV^wPsA?(2 z>+xZGMMQ;#%w$Es?`}g|73DjC6HzsXS4o{x4e`r4(s>yM!&8|JhgTfwQFSjR>&t}3 zV!rVr?7=Qh%6*9fh?$-m>&{}UqaA{)x8B&lqzJ0}ayH5n5&suv|LZ14IW^BgxUSF9 z+!xEQD_)4xTIBXv^V3LP0R$3)QM7)^NvI&PFm;{o;nWlwe&%OBioh(K*;0A0BV^&r zB}rvubm_1T!^%COQGBB(EP9_dz!rwx%!3e&7x1)HcupEzIV+bi}LE~2x2P@VFCOeLM< z4VlKF{$@I2xiCM^u5G+`2Dh`+Z{*AB7lQtU8{})C`=z40vJt{GzoAlR8M z@^p`H81+e4?8oVpcXzbEKN4M1ZjtWb>r-~-pqYt0>>XPhqv|gXx#HPNJxwn?#*?8| z4lbgJ$@3?tFZd*84WWP3>67EP1!p&@J7pCWNiexa(CJD1yMpf*IouYs|MlS8Gz72^ zLp4ie76pp8Ezsp3AjpW?i@=ywO|`9#h{$qaezV<-1u$HJ11NygZ9+9J0jNP&sD|QV z**~k9;U!(X{N7k0_E=?7w8aF^>n==`#xpf@ehu#_h?cGfj_wTO^ zsL@o_lmLren-x}%M+9EyRo!QRE0as5%R*ert>M(JI+I3oE1-=H&8cNLp_5xK-ie?c zWCp#Bog+C_7S%iG$94+Aeded?92fjPuVSXfn4xSf&d)@r@-!DwbmmFX-!qxA*ow|7XMGD=djPu86Q3 zRmJC3uco8=Jr?(kLNKT#f`rU1gX6nc&^18=xY#Tj|PU(GH z$d?Aw;SB`LA+7I{7E((P272{ zJ5hU0!T^LLk)oxTygepRd7mx@tA7~--)uCQ`3B#)vdp7nhBOTQCFIj*$eS5Ns0b)Q z&aI7)9pyJDiS_3zGtW1$P6K8j9mi&ORMZDC8H(Q!xu^-8L?nD=xs!IflBlKx8#B4= ztSGv1aV)G;zpQAvknOI^bTMG3WAc*1iC7zK57mT_LJi3=h!A2%2n%%b2g_$VENcyk zsDg_s*(FeD-ER3}@J;jg+MxnyRXGp1g(!+UQ6pQvlAg}a0hPA=*J{~2%~N!JFR?=G z5BbA7O6*cY(;T07<;25e_njEEqoF!092Ab!Ws&LQg1a$>sP=Mo&~7q@%Zh^OU{bNPO${kHR`(X3S#1QbKy^~Q|7-x|#`gjtYTdUV3B=B6IVQHb`3;<5QwdYVBbUb4BY ztD?4HRi7!u3_~jq7_81)l>OWfzWQeGum=IP=iMSZY--{%)0X-_rjh|_(wpu>poB6i zdH5V3I)9x@TY;&TCg4Yg-Ljdc7Y_0_zw=?0O4yl96W7IkJs9AAPAqXl=S%t6x17|r z@&Q=9E0eI9Jp#@P*T}6fw2)|tY1@2PEgfGb1*P^K`C{r@vb@Ly)oO;8MEi9{FGTfu zxYypJ7rM;O(Je&`ex`?7!WIRs*F(8VICIl`dDApmMrmusa#MKipykSxf3AOMB3}vN z#U`A6U^Tf8m~nyFU2NEF1Hq5TEEQj+?2BXeDoB8CxrGCRdK`B(=hV2Dj~+N~u}f3= zn%FJReHENcyxzN@i>xyBTUibG8J>Q4N{yAk<)L5YzPiqh`Xe2t(7)M6_3$+AAwhp9?+G|?i0kep(b27+{S&4EEcQzRf54d(^;sU@`2vI%xi3VQHl7)c z-x6<0;!%Y1oSB;XCL+LIlm<+QxJk=(CF~KB87-xWzWV;mi6Z8QE#~G3ZMEjC$BvRS z4UIlZUyX&~A-%TcZXZ$PLl1nWFAj-7^*J_`_^`v*i9dd9JGKHu@$n-nj3++5Kz1vnjAfO?IYhj|V-P zR8cY9|HMiwrF4o$84Am*yaq7!M`W&;WoGi+1lWicPmdwbPkF+szHFJz2eL*cWK(0;|F<>ICXZwK7T3V89>uXrTU!GwaAGcLpo|#O?@6T^>+E(5C6|k{g216Go?%UFHbV3 zLv}a;s%1%k1`kd5AOi0q&l(`_#w7g=%*k_KEO`6U{(V}4u!W{G-6^!_I$7=955cnT z-I#6Z!|>>ZmfkU8u8!`uA=0haQqP#A>%~U|V5)Q0QVTcO3G%&t_K*yA{2s_KmJ%?9J63 zd%vCA1OW0kZMl17(Hb>io4Pg)40>}1q$^6E^QJx}vw+@ZX0=Ui8vnLad65#;S<<{G zGzR)mAUkVa_f#Ug6hR;}Z^Nmd$|eWYqBx~THnw8}oMJSZ4U zJBUtpj__)3x9u13C&!_D9a?8fk%Kp(RIBqqo&nqr~Vy~`*_M$ErfXr3{ z*9i(+ArDMOY(sGjB*<3Ti24XzmV2e=<_d1tM#qkGQeU{oO0si<^7Kx0^**vMHZ1 z()X5>(iWq;=DFme*#33~e^!5^Zds3yK0M{t;i*D6o#@QDYS$FfGUL7|f)rCrQsnp~ zQFyV}D#)Rf{JFPn;r^ybh z5SgGBGv$LwjKTe$LWZzVw!yIH$Z`hRZM>;9Ku_yd^VW#n_TU}bnZANPYUADDq0Gue(@L?fn_(qk0VcZ^D4mbkb-Ag#J{s0QP#U@uKu7rxB%UQ;b z(i{LHo#&z33hnXp7M|(6+Apz6o@}(JujSGh_3hiwi5EQw&Evs!)|#P@%|&Y>DyRmk zc125{Sad#Vi7sv_s-S3h00Zp8odW71VTBhOHzjbM$s{QznR-yUjpAy4$Y|?Nvf^~S zLasZq2=0?C2a@l^lp})Y@$BH_t&J*C>GsPNW@@OT?&s5nV1qKlu|S0V*9}xxH|xMf zTV-h0DAU}u;DcHEvPOI{5S-=_R$9Zkfs(WBDe9NY`9DMpnH&t_6~zH!GJ^RVz)-K^ z&)(7}>)V^FDHrA609rCCkUiD{QK}u#;v}kIu3?i@FsEuv`0>#NK=9^!(Eu2m5PudW z(aJ6X( z{=y}r*dS9~L?K!@s=sEVb|d{T^2s)Cak1K2sPdQQee5ZjV^VqLSryL#u=K}o@v}`^ zFLpSQ?c&Y_|J;41L>H~P3}HL%A_!4-H*YA0HM6qy0>lW#_cod2svQj|wD*5&WI{Hd zWjW?i)Uv`9lLW)?nxWYHFl<161y^Bx&}CtFB*7r*7d`#EnbOI_ z@Kfy_YiH=o`C}5+2JFcd`j*?~S%cVWXS}slAJO#wY{h)SFWSz@CdPRdDQDX>Ei@Z= zQTSN|osTEVonXaSpZ6Y9E!m=M<43ieE{5m%wL~s<#h3X55R&&j*^S@?Z!U7Kusy4{rxSSeC=*Yo z9*Q&vxbFBRPI2kzat+Pn!n*#;W#L62WBUjV(aK#GQ2YZVd~{IYub5;7?uhsJF`v~I zg(wt%_{5D|b?W078OMe@Q3(-n??#YP&#!)9e&g3|3~6DnArT95IB@~t1fTC0oUZ$r z2v71(l>XacNviBX<2TXks+DQA`>JIU!pk3wuBY;Ws`rLFn ze|M4pK#2rc=hrwNiLSr;@NkdrGa3x>>p9b>>f8 z=j&bo9&;~<>5RNU$*!%H6<2e>kH@_k4@h$c3S`xaTFfo4p+bwrtH&Y%=G^v$7CA@k z>SfRBnR|!C=KQZ)09hNO>T!A7(?i5Uy*oXzF?>XyryEn`5i$ApkX*rQvn5G#9k%1P zNOlh593AR`3}Rx!HQ;J?XG8G>Vj>`*G(@Y(`;)1?d(lRxe8=xB{g>w7pbEAtEoLAX zvinXHXZBClKqW9t?DyfoPtFtnbk2UKy!U+un0LN?pjQ9*%0MZD8{dXzuywCn< ztiaz34eaLxxK&9>JWP!g4BUv~d)-MN-k}=8raSIPru%Sc3-M}Fxskrd>3k<R-Jqb;sz=H0!SIyeT1it3PA1(RV#_y0M?+F|b$_lH<)>uG4R5OAvH)rXT6{ z7P|~xUv2824Z$n)eK{cziu*9FKBA=UFzk}GxZO6{v5DNK?5@oFFiQM?Y>OIHZ)dh{ z@8OjnOA@$|3SGaqRY2EiV<@0}TG@olnr+|$MLmSFpJX+w-+Rp}dhqFtT6e`W82{(! zq6Bp0Ixw$1MPuD6{*8XZWNj@wc%y0A zy39Q7;r`PS$pROl5k*ZQ`aV>7{jSd;o)q&@10l7%Jb*mPF<3D>c~AEI*J=Ej13l~< zE-8`ZKP0)VPQA{iq*xIJst^yLVSAe?*Owv~djG61c45&mt0|JpWT|igEAODCR zo*~!Ck%N}jSV!gfSyBN!a2&{3_sSE85ui@-E@@jTSyj8zZ2pL<%s~|_HeCm z`sQ~zweizn3zFT*P_wnOEm!#qXRcRmppb}dT#R6)U?q(WrvCaIQ#~v`IdrI2!9Sp#$1%&EcdpP+Vw2_o;ht@dvd9U)kNE~)W^Pglt_pcEZA;@ zLL+VTN};2G&nBtjn9Oi`5h3=5vk|pwIR`!{8F8Sly?!q{ODVtgCL_e6j?Baf)wMT; zr)Z4>Sj2x`*?&JiY0dxjSc#oK=ZM_ftFK8CY&Q?g%j2Z5maYn_ZE!Y;*1H%;~YI+8?B@)fQ=^Mk7ZPyeue*6i`m_ zOc>b4P6wKhhmzw3N?c}$O?;vS9y6o?uvtJkq3eu-swifNFSvu`hES&$LFysW-^W?u zef%hpf{B}(2Dxy;&6zSW252a;^Rzl3ZtNXo&U)2$9-qSnnHvfhrt7>~`KP$U$y}be z-BsL4y*P6lgWj{UH)d-eP&<#D)fTNU4G)4%HPVaoKc(}p6^VUFM?7?{z_@kN__*TG zvCliCU0N|+-hui77dXL}qJ^qvD5HY#Vx%mM(>kl)*?DKYCU|)+JHFSE9-IyL2tSkG zT@^`-IrB9-y*md>+R32?ij;T)5Lf@Ra3u)M4h3IFENnYYM=*H_4hL|m6t?L| zDUMo#aG%|V7T7iUg8%z10M21{rYeyG{r!hnN^tkXtZTsr1wYd!x;U}s4}f~(ps{;_ zx@7^Tg9h|r`~+?evXwYdH4#8Tbx%yLLFZh^lQ-$<>5oYKG2+aKNhWzD17Mdkb^zEi z1gOeIq}>1+?pKdTN{B2{e4F`e0F3E|Da+yOpQ?_ ze~wG|ua?+6LCzo1{`tCSFV(cKqP>Om9Ey5s-{hyf%i2_87j!R<|C$SHzlJd7}%PTs0lWvGw>AK3+wKMMqfFQ*#7) zuGEMLkUs(#YecQn^*4tQ_H8&|owGlNryvKPf`Mm+rNr&6e6RxGfmV#Nllj+0|LfE5 zmR1^9#`Y^=uI`e>wOj7#?yQU1xXQ5Kr^yLqsM!6N8tMjmJW(9;kT+E_9ZDK5c z)o?GJcS;52@|b{JjEXUPW$4 zHgy&MTEUHKVo>vFnqZyWdC5^l8XnJvQ?c~vnB$lvoe7StQ{!RO)VqkV3hlNrZX~f z4PsIAWH~oRZ%$nvP^721_quh9MNJq%{f{IHd}ZT3C3()UG;X>eWh`=Bg$%}J~xeZobS@S01Z`fadG{z475Kd@lkQlx9w{sTS>SGIU4|<1R(L^BHKCR_PQ&p7YR9vEt3|ebrtfB>%7YeC5a#z+vGW;0UBAC7 zooKI{u`0ObXh~RZd>^Zo>@jRyB7!NK>+<&3ja0w~z{VtJl~0n-3#w02%+%!HD6K94 zq9}*KtH7SAPeUAK&I|f{82Q&5^!E$YWrJvNbn=4w+}nsxtG+IMwoJjbZQeMqL*8x>1y8rx z^kruFP^21mD!}>pdLkEQv9_DLIo=Z2=?7}L`1dT1MiQWV_i7E$KT;jw9U)}V%*E51rB&g&Vqq7tC+F*rD-mmgc`52{zR%Q(o^QTQ5A;t2iW_s=}L= z`WPuUhejgnJ#7eD#34(|FP%mej%HBT!(un$?n;!v-5YPvN8Y^T$21 zHQ(Hu+>_m7Dr;8O5u!tqv(a-Mx-5P5Y*g;V5|i@SmM7cZOz3!t(1}>{15u7H4Mlqn zYxQDLfQ$l==^F1!epbatEnPwVB}o4(AQY|$JRkbL^z;&}DFBTWu-`rVqT!$AG=FOr z?TtB+Hw-&e%?fO{(YD6TE^>-FRoh8d0d=?i_C89WtW*w(M zXgPnH0Xn%RMO-BVTjc2~Pe4@hX)hx!M3D)s{#E3}Sm$JbK1ITJ@Q*94qGfPA85=1i z&>NJCe>N*PiQ|C@_fjp9wO-4$F%6r{O)JD`aG2TO%~bMSFUB^y@qW@(zo77mz5EAV zm$59L9;X<)+OS*x1Yu+z@+moy@01(=d=yHy%3k9TYTLa`_5D4<RRwn%E5j%y=qByKyV)Hg zLON8i>hBWzz{rFgPdsi@sRgH?h4&1Wg$6l0Im=B>eGbp`@>`;zr*rsYil_?Ex=^5j z$rDvc-$d^a!0)|QXYS##of`&T_4 zNe}Q^Kp3#Jut2^t;fX475=mWeU zDF*03>2g?O)6rdk-H}Dz-6(>&A@Q{GGC+DbOwx!>*^~9Oi0#9yNIE~m>1jbWzty(2 ziQXQmAs(3O^}gJ=ME6Xgy6)toD^$nWJ45ff|9IH34b;i!NcYW+gT&9^QUwlCw~~v5 zA58(!)(@I77%7ZJMH0+buIoRE^4S_F80d1oKIhZhaizPO?a4MXig_v+ih~G+YVgLl zoEjGxCub(_)es;do?kq9s`GHE@dfv0cYgN~|0f7gPEA;qedpz`W82Do6&?I4+M1rV zUs%E-i@O_f(PC@*`6EB8H3ST~QoF{@LU#Ay{6ak(p*FEMt|V`FfzuOqf9N0eaVS~S zTG zFr%@cWWK(o*N!#;T4_=ynp$a983W*%8$-@c)%48SQ!Ar-G_!D z%x~njtr)(V?#b+*k!FCSP#Q>$AL z1wi*Q?}IlO_Rkvvw<=o2T4G%Niom5)_b(mlau4pG!0D8@miRXefO;Mlj1X~vk4(g- zfinim58U;e15S1dO$xQ`eQlB17Hmgj_ura&ebyu3zM||*CgZ)!H%5_1KWV0az|^r4 zRT)#4ic2}8(Hv~)_(MI9*R~{pyIW*Xa~(BbevQ=PSy^*kzzt+9_Dh2fzfm`$x|J_+ zr0zbCy^n`Or904*Nhz`3Vd3JHL{_}4wBB{|9c9fCmuHk9MHO4 z&qy&}2~0V_AAgkib1X$Y=p)Y!nHwb}62F;cfqBLnpm%Eu{P5w-7m&T075&>*M4kBLN8gKY<3aGJJqFHC7(`c> zm$vYyR&Fu7`qo0b3)ld8|Ix)F()15_*vJ5f=eu(nR^51utamglH#?Y#=gr z&Y4%VcSYnB4&mvISNYlFpCy08)AYORn$Vw*-^@{1ymk%uP|6Zo=0?zRP<_QGQmS_7 zrgLd+XU7wk$(@2Wx<%OTiW_1SidSFe0WA zBOJ3dxkbp?#oe=L`0)liEZh1Cxt3%?4w{%fr4dO{bV+yDGU>#!_3Ic^#yJL%M^asy?!fR$e;u>=;iF~nXc=++vI7I zK;%LlNX|~*y4i*UmgR~?;hnekpwhi#z43aP!)`?Q`iVi8$;sO7fbyw;2b0;!hQ@S4 zg?X9M5Xo%1?@qR&@33Ddv)j{^r43_NhNmy^D)Xm>ozXa528M{O+0&V<7yN2P)VR*r zZq}@SCpI>IF|v;&B{e*QvarF;kr>|h&&p;wP+zluY*}dlps2=nSDhxcT8OVy*t)vz z&$;CqB{$%i(Xrl$A)$kwGFq0Xvw5Q8dZFgp1A~@@lf(yE!rXL(euHQ^tl*yv;P1u0 zq~!MV`@WO!bwSEes1I^S;ctxbU$p24c}2v{dS3!}YhD@21_tYz%S`))NcY|Iimu{7 zv#KNq$oeNkbsq-nX0!pzdKT#708;*7Q|P)@@}9`Nv-6ay|8_BUi6|EKi&b9d*mwWZIEHFXx12i}-+?huAscrRukkFhW4bKXH$S7ECN_@ha6 zr$otmX~sAvGY7$GB90fu)6%-&t>i>x*Fw0LN&M9HVL|n`>+|&2ilOq4>t|>4`+Cs(Zvm87pAE%I^ zIx32imdZ{=^}B+H_;e4S{Sjp;B%AIs8GbV^&W&)S^P9(K(lk$y{oRZbf&=IAdb)rRbT~vjWTaGd-f+JVD*>TQ685nis93UovhKU81$dX_?sQhn z#cH3`T6EI|AS3_zQ^!7(B01ULGjL_jylsG2T~4&5PM#>L+!IN!WVxYONUwC(zfIql zO2xz?4<0}NR_w-?USfM%#UZ}0MK6$mMP$=~xP3f2#`O1UmTwM78~~Ka#9QMunz{D3 zS_vT_4d2hB;|gs{Qq{4I!Q<7Lnzyi9YoE5-fm^;|62R)$0sAB!OX~xgp3+$W{9}l# zt*w283zSGlmg^JC@8+z=X63yIbUe$j?E**0y=a(tUMeU6bQ6@{ew+eMIOhrYE@Zqr z8GlsU@*2>Q5DZpOh<}hjkn;YjpZv2n+wsKXfdl%#!lGy~p*~P>_3Pa_N{dwB!uuL#x7i#i_gy^GiNKw(-(gwFtw#(V`n^qKT%mfjp)zs@=d>y(2y zYUQ{0L3dx{t814NRL|>H_|Ja&@5g*0hhV*K#xRyrQeZAv9n%B8+g)>n;yvjq##bt5 zFki=4pZ`+sOQLpKm9@qVm6TJ`ohkI6hcittM9N)=HJn%7$7gW0h6d^pQra4#%~plJ zsAHS7CR+-XW0OXVRqE=Dkv?LoNuvA)u^JozXfDlDle&wbPYgsd2eBI>*qWzE7^6_% zjzY3XX1Y|Zs<&B5+uKC&D#Ekjp6B~rOMoPK;W}59^B-AruO^*+-q&_FV#UxWDa_m> zEx-bzr@&Q&u5+Hzw=U0??07=S>W%xyEBlvsdYP#il>Up2)Z&R$q=6b&;`p_`d;W8j zUb_Yb2v>8GI^A*U-Z;Y4T3e4hIaLXH>hR(=TL0~{zu!9G+`f=N_#yDPC|^AEew|X{8bm*H z^Z=sd79WrrU2*`7jXp=!j70*)gzQC-;s}lQQ4W6#pcZH_Gqc0MP6#K~i}UD2w)z60 z;*n;ShcG@S<|7v9P!b#G3)Pw9(fExxJW=Mi>6&#wG9KHP3k?OF^xjE4Zi*>RJE19% zY2A18%gWFl;>pfD|8F4wa_%nY_7#Lw|Jf;^Py2R_WFD-1?i>Z^C`j9a1U`(Y^-*Ti zM3mHTutmOKH4oPlcKNL23U;^$hD-AAb-@AsHz2?*yw&W#N4Izfu3?@%5=m=TeU`a8 z5XAX-O-$~x0p|Gi@J2&-QRg+0tpeVv@NE(E&o)ij)Lscf$1b2M_AG?MCT#{pnVL=H znQnz7la(7B--#Xwfcx5y+;EYu6PrSe*5!D~Y)ztQ(V?~ATGV=2$}aGYmwTebM$G!0 z;73VkLG?1k(VHIgB>AH7k$o`7|J{NE)htDu4qYD%Eaxgnok*!w%6=Qfznkxwy%c;V zt3ymU=|L!IbfCy%(rh~)l4fwcvSg2`Zk<_QogA9TVH9g!b zxsUPOMq&Bn6~yr5zv03_Q`WK__*|DLBIIKM2)Y zxx-0)lF$hF`Uau1t|ntulXhx+qkK(?KLLG9F4f_cUmveNl)2>&KT2)LO6qWp4M;v& zD)ixOYbM}=qu@}A@?3ZZxr~Uwq=L7q$UY5KK5WyU;U3bL>K)AA8LaddlnNW-TkRq) z&<ZbNBzkB48qFxMjy#RANyo#9L_sLL9Gr1y7CQ4yR1HREF){Pd!JJXd5#-qzFL34Puui@t3Yy z=b2qP5ji2#M+IAH z602jiJSC=lrbytE&?x|Z(s!^%dU)K#dW(kY0J@eN=aoHmJ*Cw26K>rGTK)9m($giB zJmwzJAinJEjVqjSz^Kg7oQT{m^Io<_tnPK9+5#=4#B=d)2*#-Zlsk-FAIicyynGPl zSz}7M`uJ3=u1WjAFBb)b0h{oo#z#$AAjy!iNr1{5>oGSqd@UIV5PAy7vd^8LfO=l& zRXE=5Xi1qb)DuoNr6<*7An}mG{LO2G*g(A+fn|-orf)C(v47fb0NaQ24}4;wOCph7 zlO7+jrh2HO0<54psFrD@d$~)q8mi6r;hzX;oTK0wr@V-H9LWu1i&a5?Ie%vE5CX&D z+&eImWisqq;wrO6{(_dNTV+Qmu;w%UhL^z)^S}U?ICTBZ7B%O5sKb;<-GeX3!%{l7 zyoWc>ssq;cn4@}py zY38EcJo+h~x!(Tf$}nYD)cV$K>!+*q-R1$--IuOdd%D9;K06(2oJCztE#loHCUOyb zg2nm%wUQ+6*G1FV2Q`N^PP>}k!wWh0`MQVeK|ViWKQwZ-aVk+nElquf5C0a5N{YOns@-8O{v*vLW0uJ2Sd}LAtGteM@lj zGeeLj#N9;)9=FYQysawjok=a=zZ{K{-n|6289GwvT6$>NLCuv4<|m%M4Y_w$u6*-? z*y{rL{&ScHaMAsg#84PA4Qtpc5_$_7`lq7>En}C{BmycYd||BP3QJbMIOA1+$57?b z*!d0Xt^0G!^K-i=I}8W%H27Gt%{`3Gye0;bM=Wm_Rg2v{N zUd;=nXtf&gJZKEkkmyq4(eM2X;AEpfv-LX}r}tXc?;Ga$05I&@R68KX_XC8TkM@w+ zIKQ0S-)aHew+{MYJ3c)SWYUkN`$@@k0hER$&luPB7b( zEM{v+#&7rmn#57Srt6EPEL*T@W^8K-g}QJWa%UIc7{#uO@dTJulICpk+B%3UrZGb4RqZmUSIo(@|J`uzB` zeVOj3ff_MzQ-#0&Gdlw(aY4bFuE zsiP1%5mzgYk$en<5mAwE-tSnz7^7o6+qO(lQStw*s}3|^*a6i8a#OwF;K8ydSy- zkzO(i3C$(nsF08aNN~+L;%99b63Ic8Y46x$uMpc}+FH1V^BzJvY#qXX=8=yh%M|5UVYV$?k;w1GS@2P zuXa@W?yBedHl7{SyiJxrUn?`+byY64cnViYIlb>5!Ae8ortyZs{J_Q>MiNu>Ag#L) z7|YTtIu6B@73udHE@E>d@`g>@$7S%&9C+v2 zvJt+^V@CM_rhn$DSoYIYU*jPK|ux( zLIgx=l2JrT1f&QmB_blyd+0=Ip-7jOAW=Gm5Fii;Y2VGv^FA~0w_aH;^N*Uf&N=(+ zd++P|U3RT_oo4duna6WM1J`uAINd(S{wp^6&s}p00)beI#kr}qeu8#9u8l4|KDn_` zHSc_{RaV_f_(s(I51*9JpMhB2_X0y@Am&X>0Naytf(dwY0j;l*4}cs!v%KGXco$G2 z;y|ytvtNM?o-+1BKu5Yw1(W4le0ZYD715;oyep%k$mRz}EB1-LIUEdHNMX=Ix|GQc zh!thiObs5IDW4%-^0;OPJsNjaJuhn>LB#0I7`kN+8SLAMgMa*fQl+w@;x$3iCR?$u zDWLLaTK*rUbcVuv*26;m;8Hr@#}6{^d=TbT9gQz}0q!&>Y^RA-u&aX_4vN#`xWBbD z?XtYf?SzPm6Z@LBjQfg2{@c9%Se*CSe)d-<5#E0M+T8;5>Gr^#zh^KT?yWkVv(tc? zT2CJRZMgi&6RV}aa&tcV5z+-sV%g7 z-mTfv(Yq8cu-Q4vMNy`7BVj%pms&V?InNvd@rWokGRTApd)6#ufa)7XoMW~Rv=iKO zpSngjUYlkPNQ$g*Gj9?TregI7!%IL*sB8YnWO{AeFL`*SuL^9d7ba~sl4PN36WDlG zJ5JNdmG4hsz5cfHMoVZYBj19O@JL5A_iiR&`5Dxd-OVJNQu|gk;PZg$ZiB3%<3>oh zOoC!vfaB${NuJbfili3@`F7`Pvf5Zvf0T1AH6q3Oi@_O%u~${7+DB(jIrcSoMg#|_ z4M5$zs0KAPmE*4yH7v|Y|7wK(x`y$av*(SMwS_kf9>%Ixv}Cq+`GZ^k6I19w(u5rD zhP3vh>kOHaS_0uJ=>7JURmd_#z!^&}w52{8w0n7%Mc>5pz}d=>B?Gc%!Gn{|obJlh zUZ4`G-vXD$nt*zUP64O2TvAIRWE?2C(tF)**n-DlU@TS^4*#Tj-N!DGjHeuUJ{IqA zdizCX{mIL1YkUqPa}|hD{!B4&Ei1{IvX(13GpIhaeq{KOxQf18px>#+b)yi;obPBd9XO;1OvAB-^g!xfQYgj&I zvN7=r%qGr8<0fl-Y*ct3hi)2^)gRdVqWdQ49(}S!i^~aP-(jM>Wk@RBRA~ykXEj=~ z*_85^ILmc>ApY&rlBDCzBxnzhHJhsZpM0(%-X6x@BGs~@HD+7yp_Ij$gAcne9gs^J zFvfH6-u{oO%3RUKlZKF5AI1IeuPASX*-SjsbO*=u_s*5)wK#}?tRULx(z%25Gfi+x zsao;lS~aucbmT-(nU7Blt-zr9DKb=}uEx`~J)YaK>(Ve}V(v^?lUr~ur3QrBiq1ti zS_mdt{*dbCK#!Us-Pi;jmH43cRW+r5{{Jp9%vfA1NSDz?=syiD2wEN6xitBfv4RCB4v2r`7Mc8HXG zY$3DzfraJHNc&=9c%FxeDJ1v-E<0xy_v0&8DzI`edCc_BxUbx<#+&7oDcAlxn$WqR zllcmcW;mS)sbR*hoCh{1v!^4Gt!~>{em3K~ekYHIjG{ugD^zWs2mC0y$}0?>8@Ed*bc!lfnhJ9Hs0 zZEYA+R8)fTud@<()7LiaUt&rejRu-BNBoV+9*$0cknnw>XdLmxOlmB#bC4we-_rQ^ zhvVd-q3iA7h}9UNH$ZX48#-G)I&bdkrFPZ6@m`OC=-V47pUXF_e51`@-wTU)K^5$M7EA1C5+*YJXKdx7P;Oz0Qp~s zsT`+RYSF}o8TI_KP6}pJeb`evq93x#aMP}}Vk{{Q%EG!j&N4oH4enwd)M#|j-d{dU zX%-LATkhs9<`MEpe#AMWz-_WyQJ?vipN2 z_Sp&=0{CC}xlIrA(XWCfO(1A*;LTD?;~n%pFUN=;<59xk%~f~9Is(McDnjZb9Ksu^ zrBb0?`Pr&MQqc%EF<=DWep@OcoopRn&4~YwLh9svf;aqnJn6Xb{mOQB8qRT!Z$YSGXR)utVZ--%eP zbpY`|@cCYuO6aUjD(5mLX9DvB8bghTKeR&XW8x;OYB#LDe&u(zvb)!Q`Q@B3`q(Ss zs>s6o%Cf_4B-d;gYZ%ZXTNi(ljm#I#bX04&6j$u=GFWhTQ&S+Vr+tod5(hsIlwq!b z2L0lsiYu=h0`xL6IgXgz&h5fLNG4VdUST*T_2GCcTiX{F`L_3dw*6(Li~(rKO?Z|S z5yK0Z5W#PyVg=}dz!%vIcZ0;!{aBtV%R9W&UMQOE>yOH4Y+HJ`I@e!{m;CY(z>RZL zB=|YdhNRy%RI{cPZn#tz*a5oZ-|9-=DgM7+OpCjFM9S4h^^pNKZ8L5Lk8KiHrMq{V zeN;2e+(EY}Nxu`lno)LxL!Rq`uE0N^hH@+~?z<;(Gc;K$u%K98Vd`i9IQzk%H=%Uha8PeR?&luG z(+!rt9-$?bfA__AB)SpBwz8TczPl_X)^f=f6x1JW;?vLO#FkM%FJUw(r%i0^tWN8$}?h7wpdLF0tEr7X^6PFj=kl*6Z;mj*vHs+8)3qiw|l2LBtJltDs2gz`ssStbJUaZ-CKJ^zbk?6^1od z(rj`CP2Fq*jpeJf7wnw0ioVp}uIYdmogwDbDsgoNz)orzM_;(2IWQu05bL3^_N%H~ z+B=)Pgym&9(^w$YPhQD;2HX{s_fgYki=E5wR2bdtJ9py!^D zGmcNxR;peAr86P0c|WpUysfEYpcd`;2|Hrw=(15!3w8W7d-X-ysOSGD$NKwg2TGbG ze}R|y)k{>>@F&`)pPllWbeD=d&PLX1!6wE>_49fk`CD15ovZC4^b8jq}c?-~@ozgm?nMG7El7*})KGhR&*fmr~)xfHWwif_&qRo2G1 znJ-7LUQzo_RUR)My|T)5w*A}zg7H@hfb3V4p#Afge`)QVa z;@(u%G&=U-*hfmP-f>`(#KcxPQ5T;t#&n$}?lcTw!p;)!wA;{KBlmw7J?b4$J}e3g z{_2EOP!^pN^9h+c?80r2k z=^L*p@#pz0O5!yL{P{F_uPEN`*cywZKSs6+!b z8h>|B_Ku|^P(Ti|*Z@ofeLyYH`55~;pCW>S%#?hO?&&zrn|p^D6jdnJsw5s7ny0Id z=`3$963U3+na|;U*IW8m1-&~kBvd!wfI}dXsO>q->9#qqSq*hjg_AtflaZ6_rI*1Uz5GAdUx^9a10VDI)j=tWS83}xV zM}Uvd&!$_XjDl!0f(g-wZC-5gR!~{l^LzPb!>lF8HU7BtLOF2Yk9e*W6Yn1I2me+yTjui1e834oCOMZl@^O2^FS>ecHyeNY z9IbW^oq=|7aEW$>?1=v|8@Ixmg~~5BO4mAm)Dv53FY>W9tS6X_CQS=RT`2O1ZXA%-sK8*(l#4pV z>z+LCI(|}ZDawXm2iZq9|4r;R^?}WXt`hQVQ)@#1_-8@`;T8w@e?+DGmtKjzp^OJC zB;O@fN|l`O&h43bZ9pmAt2gDO;u>Q>!B9}zQ7p~F)ltOfBU-0JrF8zeYIl840d#{- zKae-Yg{AT7iCE!-YS%<{C(vaxcedgzJ*D|b9I{aSJzpTRp7h!%n_-JyA)wRiXdU#Y_O= zTP#ZW6jRabI=gO{c}?+r>-0S+_PVu?ad>~_$=f780QjAZb1&Ea7&7$Y;EN>VAjwUfH(B}u)703g!%6vtE<&MPbA;2I^mI2j)u81^YSY?hH2EVcpZN z?h5oXokrOW8N%MS1{1m7R_>GKBC$S*!)`&Rvaw4UG2z|TD2D3vtJS3%JD+*rbXXoH zoVj6@KOu?4q5fk3P`Kq_U^jdbmP zDx+PWR%t%d;HLWSZbd;PX4n>r8r>y4>`dAr{i(R7lwPP@EN_}s<1eCyC z`i2O_9iN!A_2J6NGW+R%w7g?u=kGe0(obn+P85Z()5ozZRmkcEFV&wCNF&8je>>DRLE;|;{^ zMHkY->|0UxTTmshkEmJ|8iJe*e?kYO0xEhn=;)9=D;OEx?W7#rKWt75v>44_6FR?4 zNe$AqLC?EXz$zk-!4*|n7a2^YW6f~Dv2}PF=CO<^Fwsicu9cxXJ@`<9^O@*m2#u6J zWD789ACTLA`EyX}K;mr*1pYGUvAxfHWRS)i{CfFAh5MJ>+$w`GSyC1-sr2F5>Mod1X=1+_!pX|PVA&b8mu^K>T~<7FAA z(Xlms9Ecq{Zi5h4^xBz9ritr|Q#XG@qc6skaQk+Qx3Z{S6@r_ne=j zLeaE-wGQqYIh*rAU7&X{)pd&45vK#4*q}6D*o-&@F__>lY<_|bGV#d1hi6bu_2A@+ zDuai!{T=U_3Y!|@huHV&5$DoBQwRQG^WI!w;X`@1eQ^gL+wYD`L1|(TQ8EF4)&2wZDlU$`Jl`}5j$dh z&-8X3$V$-5#|CI})N}!q?}se$B=Fox*>szwCRR#RUa1wg`)LNDAR}_La!`^&pnAtg zA^TqD^s)XW+#RZIVLVnccL_Q1dvfQ=U?p=oho`X?+jd)VBS8Gk`kI=k;r*VoqGi3r zH%1X*3d<;WrPOs$^kuzTX3clrJas8-KJ(OA|7YZ(9;438rYiO1P})Q^UoQ^*BbwXX zzI1QMm!!S#%h0i}$kkJZ5EkBQcS%6v|N=#JI*SU_sS96r)oA zjnvgbx>ef=A2xT|f`ex}wI_sh2?f=2dBY zv!`S2?u@r}?a;6FQ%cAN>M;2^v7~G-*4a&x-#NhYV2b_o?*B98bKp!TbmCKA)%=W4 z<&NK3cN5%8I$8ud0yDlRWh4D4`$(U2#cTm7z;3ynZ`q;<&^)iS9YSFgn&c|Ws8{5t#{@*F`|JNQ4} zV5W88PZv|3QMjZ#T2m#-X4_|kg88^^e%`I1(i@)s8P?R#o`2mB1^f8>pr3s=^M~&q zB-p(Ba;Ri!t|ffXCD-)!?Br8`n*60_%USF7h7vryyk3;mmsmF@l}b;37@bJn-7qol zSBC@M+OO&D6Xb=auT$liskVf0M6@>&OY$9qq zIW?u+HpY6)iYK5q$eXV8Q`z1UGB@;n5W=g3 zKxn^1oHaLbFvp~7TW*)s); zyVLFy1DN~6CVF@E2mB?rzvx$r(|_e{z+MIkI!~_1yWROJtKJ%EZEG9f{2Ybml#$~5VS@2}_tJpkyA2Dz$eIuMJYJgZHG7z^n^FKbu zss4O}^YM##K!2T2WE#f54EZ80aVd|X9TkH}`k%+J=3_3(EQoM*sr7tQznE(Z!rgQt z^nq2OllO%pvN86-a{J1@h3WF|2k7?i3W?URLVSHp@MV%nUwxM2;cO8)m1Hv0n;$B` zOeK!%A>^&CGQTW)N0{J69L>-!=@EU+1LusD>aEIj9#Yn}V~Qi{pM)G%jJoAFe)&jx z`eEZ^A0Muqqg!e2yQ8}U56c_7)#Q{eVc#E0va+Tg%O~Y+G$kJ^32yMbEab=g{E&CI z3^Q~0_tdD&M}_*iw@FVY`_ud;(w!R|>jxgbAgyk^{>-bWf*zxd_};;XtPE@DLTfY*()5oPt$X+pD!*;BFGIky8J9gLn-+DeZ(vXb+s1FR;Ro|r+YVBY@^|a*bMqS9ywS#Px)VgTZ zZ`kzPMcGi{%p6AiwS9Ct<5ZV<=%pY1YZ?JXZ^o|7q7ojwsI`=7j&IWRf3dXwQ+#P{ zL0{-OwZT6{;E~18Pj3)nv8bDO$HCFsx>#tI>18}uYw3t`Y|nI)58~~SeMKxdB<~$g z^p~P~{Q*+l+5-wFNAF9N*&gquBIMfG?Rql(;7XyV$}WuMMX`&QpO%_NbvW~Sw!jbw zMawuh+>!QKNfA|iw{wmEV+Z#wY<)9>YZ>tm*aY4o<5GWr@> z-sgcD{D4#`=`5PtLlRoLm{_zW+AIM!mid`d<$=;QL@T{LGxjpTc-S!`D)YnS#y~<( z(f-nw_Zm~nPT>nh(^9eVSvY@EO;z4X51zlyoqFKtzq|x3A0`|=oeW1vz znyk&w5CTa-N%_<7=%>EJ2zFJ*f$m>dBbz(16n@>rTuZ->(Z7~HcQHFds53|TyihF6 zvF9wG*B2q(hQhGQwMA6g3*V)QlICz>w<0X%RIM(+w@CpK43tUDUiXFOqmW4DrgTx3 zA<~gLBqA#0c++4Mwioc<4ckNNf5Xm)a#eC^F?_IV?REI3fpJcVToQe5(8R{MW3kI% zjt(6qV)5Bd+N4GQkSp?Ftt-wLsXWEMGH~y{r@?^J{mYp*%U^}aQ-SbRRs{%?%ri4& zPY>sQquz@Un}$1&Ib8JlRp}Ggwbl!I+qk@K5HPJtWm2Uv^(@)1!5vVam9k2TqndEi z=2rG3*vf{3t?U#6P;USE1$yxxxm^u5qN)Yx3L}_l0&BYuyOsMVL`nNbsYvp$4-!=| z`t5C-MOIts?ZfukjEBnVZail8#z>78?0&8NXbc@lf@FjT%MqUGss67}ItR;V9iFJE zqm|A*2ZDybb*@uB3qDO_cbbt^mUs6U$>3(Aso#DpSVl^Y{r9cbeO&%P>=#vNdLE2@ zW-kW#XoSt_(mK8J|6vh{wrc4F^Bkf9B%`kD=FBQbr21bn%s{so%74p#GnIC-NDH3?Xe{;ml9qRks6fk5xIaMRmhSUWO#@E0+7Zh_@91W?QE}ZM!(b6c-#ZCf z5^VkG-UZlEmgDcELU)LAzxL#P`SgqZHQSwch$+XjqxQ~Ld`A1ti7VUs1+$ixehgwm zW@dh-y*v#r(xOEDrLbTVm?Pike=;?vPkP|l zIHz+{yGweKIls&L2O}Ppn%kL2axJKT8n(ogBX5)dM7c;d@fI{NcI?%dyhF;J`QEjI z{Cx;?m*uBA_(#UrvCO%^^-HT7hJKumIh}Q}aLi;*=|jGHPg<+JM5&FquB}9K)<%+X zv}$&<7><~^I>$(mUFoEjN7I&?uqDTgsbAK3y<$0xpP9$c?E*u_qgr2HnDOh@l&9O= zyxt#0Aif;Z>tXBl;9}QJvTn?#B2!2uS?FG$32qD9Fphg;m(O7qXdHEAe>1hw@ns7kXoBPUrMUYUpC30SLgySV4!(1cGAEObcI9&6W0BS zdX$kttum2~*67OMC(pbeTHbcVn_?b+v$u5Tg9X1YwA7tx^CfjO?Z)RS1x@G6^iZix zVY5}-H$a6g=@)BOpa(Zg;&#SEkq@<|wg{>xy zJ>)*DGZ{TvLs*LSQAT9(zWE!HNFzmUokwZG7Na`N50a{0bchL07bJJ6c#&+a%KbC5 z{eaWTHz#I#Son)%4-eoUDOxtanK1B5nJgVt5n0 zlEXR^1Sp2984fQlloNKFrNXu7Lq(1T_suS!uKfA|>a$D#JeQ(^1u~CQ4l#B!R5TqG zW5;V{SEeL)MMQzO@XQtMMe}LZz@p3pskzL>UmJ2 zKMX;@Z|(h23Mc9pO?>o6& z_N@h```^q5n3-?+y;LIZL5BD%da0GpfuUg#>#;X`$A@Ai$Qi>om(w*!t(>{HsV&M| z2X#`VBd>5CR6!wcoBI`0_u7z@xUy2XAv>Yf#kj|=N@k?{eP) z@uUNnRr+L!0{b`VvgYhcuw5MVQO!2I58QJ65rzFiG1ZRh|UFd2S z?MeI1H{Cj@g`edUGEELrA6SXYQS5{cN#VMi)pgRF+dAJ7g2vxd{X^^l9Sjvpo;@H};XGvh?K;xr(=|c3n~+8!mrU^n{fS!@|$)+~KBsUoJSW3Gx`)mW%7Clqi0Hn`Y{j2^FJ7WW9+Tk<3#5tk_T>b zxvp+vlpBls#i1hIbtu6>tgjwSG|(;F!l79dP6!IW-n)Z)9R7~Gcx4FAmD z1-&uh+oe*^9Q!Rd=EPhD8pIo%Y|WxDS50(~?~6?TObJ@Bz3#h6>bi%-bW*=xbaa9O zO(#{%Ms1hG0j%!2+*_q*t7XEa44p(50rAlr(azLkyK&(59Qw_jH!;3q_h(3i?;ifb zZFGV53XEqF8@6U^nj$HLhZ=hhalgy-PUXqmnm{tY7vl1wcm`kDa8&mbEPc?0I_aCu zfQz~OthXZPEv`-H$$Zb~fUTFz1v2wiG~l)fy2Wc^a6x|G-7>DmUXoJHsytmVSw8bw zFfr)*vwiycSVVP9WJlUMFAr2sA(`HRu@u?;b#}5ni*q__;J>iwTPLrrmb?5+95uw! zz)^Xqx`ikILdoZC2jvQ%|0W2Ul#ec4YZwyS@&J}ctqgRlDV6{w(7EZ>#HbtFQu2k0 zW6yh8Ie|OOA4>LONz2lcocpSYEle#jU*%=T!PWDF@?BzQ8|&TRt&bD+02=ozE=D6N zk8Vq)K&G1=@m>R=$y5k`;G@(nyV-=~>+ytp=sCb0rA~DWcSicEKCa}kw1mH6B})FD z>=J#a1%;8{bZ?3F>rr||i-Oq<%F;5ujBWA&8b9Tdr5EsZr&bZnuDQ9lIgIJ&5DR%s z7UGBfnFf;gzD*^DCpL=tXSI_dC3{Dmd5cqq3zq2zeg&sy7NxnXdB}qnM4-w+9Fi#Y z@T{(czOk1OV=^l6Mm)jhgfZjw8UI?%InQ^FV;w%q`&wm8O3el{cuQm1_5vBZCzpKUB^f|CdIwyff&~VckU-CMKwK*0-~NwAeZaQ{V|jaY~@QT`3eeSEuIb+ zRaoIoM1svqtmBENZ$}=}Lb>^r5dPl6F4S`gQAI~sh3cZt39!;UY+zcfo!=e{3&3h$ z$SE~Vu`#pufj-zbTGoAE7%H>0WIZUyT3=Vb6!#SjZ2Q>wu8i2}^`&tomEq-J@J;Ac zFmq~BQ56CeQzQse=ZjjIzpQ*7be7E6a^Thd(ADDP7Sn2~It~zR?6~u7W+|wrtjx=^ zvs0!iT#1VYc2BG$3h$3!&U)}1LWaFL9oF7NtVe;CCTl#wvp%^j`Jwu!R z!1pM}r*_bD9YxXdPUU@F$;1rpmU+f9Sb=bOEAAf7QsTrocKDJ`iqSs}<1de&jx?kO zv_AU*J52vBd$Vfx602+;7k=Hq)L`%gF@G<9>)tEGrX4U--I2pEntHa(mK!t&biBsl z<>r}bsXQJ35}y~WnHo%`<{!Z~Mq^M#=|*o@P84;kk*nz6t(0nNFf|mqVq(&9kA}QU zNrs*c;%_xQ;(;!rjWz>O4*O33H}xd$P@+Zb!?quB zp`{ALLm$>_rs36p-4UM`(l$<=+eH{bzub0xhYUIaY6IiMf7*zW)KI|s5nA45qb9fS zT_}F|U8ZLM&wU|k*)pk$i4z?~ht_AMA7*vMXx?4b@XDNrP?HFH7z)8It2Kqf z%Z3mmqp%O-e~#fI&+_rzKYkvPD12#rBpprUiYf>3=(3F(jC$o+RJst{fb0BFU=VTZ z;ICs{ef{^o5_0m-ng>VAbjwHod@$ls=XpN-Op#{y6XJ$gT=#v=okgt%;xx8{0)W0x-uD~9DZ-P3pGR|Y>KDjw5riMu!aR)IZrkm-khx* zOzPLnX|@cixj`|or5+DhegVOvVhH^C^t5-g><2;UX}3~S-uL3@?RIOv#Nz;p^?9NG zQ0!u(`6GnETK8E)aS@SXlwN<)8q_h z-Syz8GAk%Sfv*XXQ6&5+k}Oju3hbZ=zH`zF)3^OeEa@95rm}oxK`-kwaSdh2*(Tdu}kZ5UIvIV!RV{4K;vU^-#_-KSo?BGYZPLqZ*A!o2` z=ZDfO(>+k@UvJuB4J>bx8r;e!%1B2>8R54d=wyuNc;GayJ(5IP(aRT5-!WMYQ{~8# z7N{N+&V)_JbucFT+LKk~B<)u8py18>pI?7|7ZJ8B3VZ*Vh%CBr1ScCnL>Vmy#_>Cl zW|lW%nk1TJo}e9KazWFVU^<}mvZC;lqlJy-3=THWeB9u0Z(f-66kSA={0;4Z#0Jxa zr_mr;`E2``qiSEl<{{{i&qAQ-qNQo9l;q6Op79RD4);j)H-8?gAdSd zK9ieF&gx`mje-!K5KuldB~JnNWx}>NkfW7OXitWswQo;9T?Z?&UQlEI;=_Ik76STA ze*qu>_AY}Y8l$5J5^I3pn~bovz0q!6qBfie%4~rGHlA>*AardsP&M1_QHnyrSf9eh zl#9a^w{J_D?ECh_b&D(wV3mz%0PQ|}$>)63v6k$MXBc4l78>GcclyQdP|fpmNKy|v zqam#2u?wni8zd{!s5Va$c2kPtQc{lpEv!k&ec`%N7=hSz4%pm$&x&5AP@Tnz-Z0F+ z-e!JBhJ;L=>=H&J50C0+1$+fe<`vCIx+7P3zxm*o)$?^S_9CBRk*Wff`=!f; zCc=L~fYz8SF*DU~LCSmArj+^Il|$Bk!v26 z$(edgZ)f|UpQY{!XmK~1f)AHO5(Rb7o+w1Cc>b#;v zM|H3K6wY)_+j#ci#gp?ff{(o1IbxHDE7Js<+Gt-6tk zS3&ZA;uXHEewl{P1}=a7@p>t9BOmsuu1jTv|9Xdg^@SK>5|(q4u493g$*OZUdtE|v zng2~V!hDImPM7(}Kn2SPp6-YySllk&PWrI1(1LB3W6^V_$oI4t{ob(dVC~I(Ql5p# z$8~dl4XfP>BJE`r!g?}olb3y;*F8PBk@}#(SlP^hIg3nzg#UP6tEz3$d?=U%k0uA78jR`Z z*R1Mk2)rR)Oj+MOJ^Ymex7+#|Wpd>O@pUOoY6)^$^hnTJv$x8Emc5$bj9XvA+Fv?* z`$RTX*S;A#;P8jGi3R$#pn${`)3N^1wR_itY63u{5;d(GxB5tNpSm%`V@l+_zmf;& z1L*fnyM6qvrpTvg<}N*TJ8d{^?dS&{!xeCUJ%vUQWz$d7v2JQXHuwbBOj{5}R*Zu`bcVHuU{Cr(7)S0xpSe%rhwIu2R{3iglKecynCzr-$O`ebI-Bl+u9 z2Vd>!58yn${EF(H$-DxrkDRwQ62Pm~Hk}ZU2WR>F#ZUriak>zNE6e zzv;KKQyS#Ua-+8eFB1^Pm%Qi^?HpC#cD;DT=K0{l9<-^(N+(Tk|8xOq*Id}4bj&zgzg{qY2lG(8|vQ)Wi#Tr z=;a@R8C8X%PXCk8fU95{8;0O22<~cj4%mO8D%se~GBQ?)g3!a+OGi3W-=zyO1zO5A zJo%75h0T7CW}r?KUab_lvfP-sZWNBRymz41WFe`?RU*(n()m_m4|^3;n}_sYqx(V0 z;*I#A8%adYuX%#+SaamJlPdk#t(7E&-o;V+M&!<774sdd6hJV4;0)osJ@Ny_Tghds)>Lo*ztxRuf}~>Z z!Mm{=E!&xb)l>o5Uh&*(#hi8nE4xfl*Ke!-CzE4MNDaHsEklIalZ`i2Ou?ETH*ossH>_sjw%1qGD(#%=DTh7cL+SUDYy|*G zWdGIZYY%ND+aM z(0L+gWSS{IXoG|Av#&B&1_cT+&G;ovdm-}?$OA0}wKR;~Lfz{}1t|ay%I6K*%o~96 z-;57pl$@E15SoTL;jeH2`!e^*f-Vc!@71F2t-EhLw?5%r@%DwEbLYDRSGzO!Ad>|^ zT&VRLhr{&_t>^htT|I_eu4wGRd++XXPvVV5BJCaf&h*_0EsM!HwIlo?4CeU7BrDy? z`>AC-H`z()j~?f~#;2cv!f>{vy9Bg$yT;e#94|gw!Yxrw{jYiA$(m4oIHyYbz4Bz= z<6y3(JnU2WIkSK>;h5uHs;WM%4G(8e5bvM;=JcFpX19tnem^hcQMSBeslAo*A*rT# za_ZHPsd&3i9?C(Dkz|jbwuxI<2YQd&bv>Qy=5v{@L5i$C$OgoIbK{(0>0S-i&fdR0 zC-jwr2mk`5JVipEvOqx`)A#g^O0)2P0TgH{4m<|`SLF8%wWhAr?$T#W=b6t~hEAyf z>?aW0X;@CV%i_;W^$Kr10ml>cR+lo`RQu{sn2^7Y1capZhv7TQVQKwX0jlRm>-nBO zi_`L%VeL7yS7vRnK}q{~1^m4LlPyJF%d=QSf7+<_8)xu;+w5k#2i81*utZl3t4Nx5 zQ(y0~v*xVv9mxVJZ+hl4k*iqBuu$y*RkOszl^F>87%3R@joWDw#Qh3F02>-7kC1EF z3Rxm+f&n}@4AaiiIlG0urR7W;>SIk(djk4>B|!~SU;kk&;mo|0+uXNdFEAo=GpQzH zC82yV0eZJ{)FF=_K#h5>tIN0m7ml@6Gd$6}k+;&vK)U7;dl*@C2_fxmLLMaL;f70n?Yk`BTN&F1Q(Q&-# zb3$v=DRbh*Ohz-6x70#14Ls^56aOX#m8?3jcK*&_=jI53lS7*lwucTD+b=iRbg``` z#zSXQpLfjpmaP1dnb3E$$@4Jt;Ou1BwSB#5f=T;~#ZLeC>7j2Q)qZ2cp*HuDC+?hp zR4${-^=yh)rVL~Ptyh|pG6(AN70OKp%iX47Hwgva7=LEE8}#b~eq!^7NTb$*eAZ;! zBrA~K7Q=*{9!BOQJNLwfy&-_x7&WsNl?O;-qqH9X)aR@DbSj9Wh zxUcNALA@_m4HAP+_O`&4ub-|Dw?19iWf`k${jA5W?ee|I3cMcX|P7&6<*J?M|) zxs>UqJ0x4q*&=44+Q~K@vzo<#O$t&u6|!qvg(Jb4{I#@bbgsoIoYC1|Tc;YoT#B=PSZw|LflgjK`(=n6 z5RZQ9O?PKj7HOlr^@_A%&&iO2%$k1Z3*YL7^R=nhL|;!Z_sB4>*e-+Al^CMXC+@{W zC(qVRw?2K28=n9`&#?-&U`YcoD9wZZe;l`dU?F zD#7qQ5SjkY!LUm3$`3F2r39O$ByZKYF7ZeE^D~KZn{-&hPq3Z-xBe}#oc%BOz-QyT zGUR3Hij)a?@mj>$q`3(+H)eIejVei8o@sP!*_5&lzc;@%Nu3oCc`jj~OuB!vsI_gi z3)DjOd!w#sV4CRbzgT*R_ib>&PYd{;m;`i#IN8n7Wg1P%0t3X#TEJlPF)y3zlsfl}kGzexnG{J8_HqWg*q>kO7=chl9CY7WZirggyh2FoxE;j(H+8V`tL zjz)Z3gn$3*v`%>QrE8&QfNl~SHvVHg^sokG`f5c;!S5d!mWpnr>`-iK!q=$q8|H&* zmam;?3Nn3DGD^MgtoKQ)$PuTuFBE)H!1oQ{`7iLX8H>%kcB4{1ni9i;GJh_Wvai8D zcF1sF?2sAFtk`(J?1`J&ve5NP%)rIjZApJOk*ya&Wcg?>x+N~!C1q_qSaf*#0j}v%L@9*kV~TS4j|Ej%zk#=2BKKq z-V=`fO)uz@O~2Q;3>GhnVJnl@I#h}0e|qr)?=Hqw&!Rq-^6!RIpI-33C}E#8>&wh* ziViEVc-|o7Lbd1a2ywi&WGWA4=~v^oAvSiBAAMibZG|s-sWNB*7gLUGw7lvWlSy5_ znkYkNy`CY(If3PN^l8i^*sdEQzGf`MQb=L<2=~xRxW+!ltn>%ndwv|>6wfaQ^ouZ* zDz72Sz3b(boM_j@K9g@IxtL>D%hTaXq4rWcPW0BveyojIy*UUo2q=QB_yPt@&8BFcK|iDaNT;nq9{riL_nk?#fTui2+})9lPX{>j~3iI2`5m4qbM&AJSr(wMH! zRp8OP)9{wsGpcM`$lWdT@=`-vS)G~#c&qqU*F8Uu0v#9KO`3Kn8=uGt&cVV)*8m%vAVC#=pO^JL-mwijP9) z8VfLK(#j272Z`XmVkd6Ya+#oL@6P;pC~N(Gnu57#^49W0_#M*20Fh`R@sR)*Md{1i zKgQsltkyZw--cW@BmB~)vp87kU0ZQ1GCOWX){v^DQ z-7NrFIlNwnlDk}_U<=pj8C43xH~V@0M^pM2Btx0Vw$YI^Y~(C40y{%-Y{E^T zY1_}c2eF<}7gOBpSkelC#S7-eA0t!9z^GaZ1~54m0$WkWfMKIS$muSkyiI`KVUuVzTigtNRm?AzwX~bTHbBzEC202ws=Fh zPz)(Cz~O2;W}>e3MDxBaaJC?6Nrhe2;1C&DPRdq1-?Ov*YweC77{SYYa0a-KkG8%v zcuV>~7J^rF&!xcsNe1ovM6kQ{gaqJk`=5`Kp;IZC6E$YmLi{~o7%q+;o_etd^dfeZ z^Gjs|N*K82j4e;1?Ze2STqDmj>{z(sx$+`?i(gPutDcs8{`Z}N8e9i-H!1Qa!5xo) zKK8vz0b7xf`#@>@a~Nk#-0m9!&g|dc2{|LN6r6H?1&$Q49D5^O)3Q@MMsD%!s#uFJ z^kiW_3p7&p9G^pytpMolV{6!%Z@RS<;>A`E*ZA*bO~2ni8F$JY8!o)nzO7)Z&GX%p zfWM{=@$;V|6~(P5{o;mn}(-%eh9T~Fk*v4c#J-yxq|AxFVt z+Ba9~ac0zd<}eT#ViZ?L!Tvc|O3FIRF+Sjkleow`*Mz^vd9HCJy^#2Xs38b&fW44B zobqN9tNQV$-J-88_ifG5f)W*RN^PsV4V!ffW)@*UJmbzz4!_E#5shfm{jM`IxK1J> zfSk9nx_76D>ZbSB0Nj|=*1x=D9R_+_IEu=6KXe`aH$w@F=f^?$M}_(~hNr%BeQc&` z@P#N&LX3!zwgXBR`lMKmF73tLi#g77O9EQ0*sPoLweU)d}HOTstoZ#+rH>n{ZWn=)Jm=mE?GYO#&a3lvNG=s(pyw3%+VQdQa-(q;z zDaUV4mAUZt+wZfLJ{VeMRz@6Kcx@`}wOzs1PMHsBo-a(Ezx*n)HQV3Sn4(EYT!gQI z+mtMge`LnZx30_S!*!uEZQ8*SPDUsu24yy09%3>0A@QPn@TgQ8>yny0{55EQ-CxAj zz3Zk+4&k+@Epn(}z#0kGJ9Qe^4D#eQav3Dky*Ap_SV=uf5Z!v`F#MBn#bOrA14&8j)fxP?nY^N4vRqk7xz zY%DedAHjdN8NR;p^BoEg%wU*e5_vT@fDW{}kFJ56GCyr5`W=apq2I)&u~k$U-qe&n z7j|~IX}6pXTyIUKk-XzzFb_{@=}>7N5aPO{;g>{7#2dFd%fGVnO z?p!NZRrpSpYo(MWc@;-x(`E%XcrN<#7v>!R$FwJaFXPG>87TkX1F-n*2(aw%hXT84 z5^CL_0c+0yF!LUe+Y+yxarT}56X5r6v3?FL9~|WT2!xFV;aUlf5Hj1f$0i6lGjpXz zIfnOVd<&+9AoJS4f1TryXt|Y|lEP@+skho1z#@%Ic;j2qhqDs}!U?{`cHMd*taGk? z-F#AtsN{)Jm%0Is!Zbo)^Pi<@<8XxhpEy6BkM>}ul|X0qmB5EUuw`-Gf629f80q)J zI|l=b&po)PlNFBN4!a^rZ_CNXVv|cY_}eU3o!Zv#^m-y!orNyne6ebO%a+k|?M7rv z?MpoEba)2BR#P6=D_vz{e2f%E~Kv0i}W9H2zT#K zdB>UH9>?sSkwPET(4QdK++V*t&g;pakeX$bX{7eMqMLKH?HK@=+LKv0Nibs7y-fK* zZ-4GTu=-{vJhIiEc!VxwrHp$2s`^pru%#L3PEw}WhU{~Z6+aM^ioZULt|ucX>{jPU zK$#?xx*Bh$dHqH%T>0Ayc%Hu%1q3VpFsWIe+zF5^d>~Y-j6z21sOmJoJ@I-JQ>H{g z6Olqnws}8lw5vn_i(~N-^3>3M4SoLUo{~+vr;qkvH~JJ}MPa8z*bynvKY@vFg2N+k zOOuzxtWErZ1_>g1L&d^0I@bFgD9}MlOD8S`=dWv zDAR*Ynx!!a2%GH&!NoSX;NqsFz8wi#NLf^FEoT1AA!kaF7X#h#(&U6?Z0wTzMEbS0 zkirj3q`88S4&Adw`5c?w_=>I(oXos|vhP&rd;RNJ==aZQq%Fv^@8}QGl#QN4B8)IS zMlch*@2<$UApXr9>jG)E8V@`tcX^L4!7wnra~R1&C{xZHbMMo;N>bHwS4`88Ha5q_ zI{kd9{gBW$I8MxwWGNypN^n5Jf;UgmOrhnwp)g)& zIUDPV52Kr04$2NHES&w(8;hV4Q@WQQ=Dh7mQCL#JsV~&#*qey0dC3=*uQI?o+ZsIW zZ{LTPUnl@0k2TZQ6ps1l9t!v=1ZCOtRH}rqox_7`8SRA5?LW^B$z zu0cGwoO52*)f;1`Non%rSy@b%A%-bbt}@BhKIs1GYJs{!17ycA?bf#jv8^WC#)pkg zmYbFtx`_Q9-OWskx&MMsJGxbAWtK9>{T@b9$zJ5W7^8xJ94&Yr^zoQCqWdjdKETox z!cO+okUl=GUKv#N2H6T29DJmp)o(4NdzKTc=2Wo){^>_N?|FKG?*g zC#WIOS!t@t8#<{Uj9F4Y9(}E|!kC#Oyx?8jZzBcDnEYQm0(+I!1$bk17uz86lG1Tw z8<$NQ-x_;I{l=vkGI44bjNZt3{nU9#qmmZfF~u#Na(t9rf-;=V7G^Pxry?P?Nx>-` z+S%wBh+_Q57LYTK51*0H1+&PDSPiqIg}Am13B^pN=F4CkyV_EMy2nBr=TCD#%dhobg>aF?{0URdSR!8@DHe z=e$0cm!0AF=Kz;uG_lAXR1$zluCMywZKJVEuz#pz+N_oGv~y!JE7+N`L(t_(etC{- zv>G8`j;=C852fZs0;^F%ZLph>X=n-6eBhjEiEX3HgU)M@kl{mDid>*{1W&{7H<0*r3v}fQT_a2+btk%<_glh;{(ZL6*9rr+Bd0x}) zfd1)BY^P4ucf7%iww;r>r({iB?p__isKu`}sbOc>r1bzA8`&Si{J3kuOzX#l6CDq! zhDl42@X9|#e3sVXb1s^4K2T?dRK#P(X<=SRc&^kO&TfIjQ%#7H`v4w&2|8M2<$x&2 zp3PB?>yDF~z8*$CC8AE%W=FI_j=E_EP(IuEpZ>hxcUYK*ax4-`tiB{z@xnD{mk}rm z)NHuUu54Z#9}pfnz|bF-OZ?H^nt; zo?fcqt13y0eyl^u>#WuE+~%p}pH>eN*8;wmW@Bqx zaq`WW53-L~<=%|>C#{9pM%TV|g~ht{d>vuD&2sL%b=qZrxs(o%$9LQFc->phI$AZP z<}T#^1zHqc(t4*9Fo60ly?5aDA(;1mtZoQR#XX44O{t7QVZ*yWI5d=UOix|L5(#Iu zLA5Ja+0xVn)_i*shv^#y9D5GFu5#zl&7AmW^YSDE!3;dfz~Y(DX>-8H@G8Hafx&Wb zBCkOCiwFJji_5^6<+}gz_Oq2JR{JnxNp=yM&drtY4^O)V%-GZtuQmVXdUKyk*W;@8 zB#;@Q5UC5o0?jK9Ynw577%z)cluj}4E&b6Fn`I%eZQ$& zJsN1P&9v4RJ?T!ho+kz8F@Kiidyo|HeXP>iT+{Mq;!CqObIW2K6CJb2io(2hFB-b$ zdq{!yxl^-K@o#9UHP($-x%LqFqYcD2$kOaO4f|Sb6529K=eU;E%nLQ@FVrbDmG`?^ ze=4t}I^*EU8}N`D@Wa>yR`v)|+ z2&}%u{+^7QD!RixEGJLyF~bs{tR>%71HnOaNH$>Jks`(QdP{=~&` zxc(bWF@Qr#zaV*#Tn^3nqrBw>= zRu{RS`(4;+Z&ip~9&W%viIp!4$^nE1FQ2;b3a88YXi2Ld_M+Mx>f>zw+TD?5hFYE( zAlTL0)f4JYrd(v2aPp@cf4{oibVQIpeg|A@R|WO9`GxcnVQab z7@E(A1C&T_C9J^%iP9|-A|Ki^FP`-tJ^`O)eNO2yPDRtotVK!-PY*=yeaIMr%xz#F zV`rlh!mu)oQOD-Rh^`5Vs9d&XYTE{01CdA%_}Qs<xhJ2U@} zH3oAfB}&71G*i?tWhj`eyHin(Z&1Is1*zJj`CFri;W+a>!pZc-9NE|SG$OKLcp7gv zw%y)m9B|q}HG5m5VEAoKo@g~jEMW(f;Z|&GZg^p&*@B1of`%%@M?pms8RTSi=0F%{ zqPcGMkG#&M5zsfG9_U*g!!B?X zCI(emK@^z`^&Ld#@U?#$n-<77O^T0Z4atvWG>oWQZHi|899fA~JqzNm6mxt=!_dp9 zBC0DnaMwMk{n-KIl3GpIR`Tbt)y%Z_5myh=s1>i7bT>B2J~bE?%&sn)*(nkWkPH{J zySLw>Xpm^tXRbe^flt|f$)un$rSzl9DGh6r|_sUvU+q9qUv^m$u}UU32PDI=&?2;u)Db%!S9xkY-oFgTbfQ$8eKNw{AVi2|i$xP*Cuy93C1<-x?nu=MgRa_U+qU z(5L-J^_T6~$4p1v z%}?{+N^b2_k#s3z$U_jRIh3UPA8z=EAoiNqjan2*WihpAgX8q}yqc;81`5VzT?wbD zA!7;|+bybs2WB@MQoAqh__Cj?VAyFqqhe^AgOO|~>@X-BJoFjGl8Qc_UAJ}MoVx+9 zp?!2)DjrO5<-8c+#yOXDl;QuP42;T_Q={hQyYTFU-{PM$I0OP0kj=&dpF+ zjb&Q8FAR5M6^6UA#?`s2!TcI__V5}S_O}O=s-m;?HT!AW zqQ)+&if#0>ZC?oOZj^KlS(z+e{TYmgOzk){REN*wvY(LUmC>o~Qg^xtRoqourUq#% zZ7SV6FBjE!5fly{Ig!{koR#0R*GQ5WgsZCm`jbDD8TGcGHP3vihWv>_ug;M33`NS( z_JGdTfAXb_=j4^3(sr1C*-+BZ8U|{MRg2w~YHD19FL@|Cc%hbk?zxyy-^-EH_j%5% zkOe5E;BE5{X_dSLOjYjQIL%pT*Zr5VjH=YLCd<(q6QQk>jx0y_1(?&Tb_u=YSnr>y zP`U-mH>oasIGE^)I&b_$(7o$hQm)XSp|(a?oDAqZdP^Z}K|>*~Umm_Bs`imNiSM(_ z9FwP@if}2hq}m@J+C^9sDW7*m+8#6}ey($9KIKo_d2A+(M0zbkjBGizlqBQhk;lP& zIYIPCV|r}ZQi6jo753|skq=FbDXw)s`O6_|?yIf2H#?!^t-{6goBlRiVG{5OM(Kkn zI$=#kceT;}(76qXHIQMQukQ(QI=%w~!^|=Ycwmq$M|RI+;ivfhVy^Wol*~sIXa#1% z+c#mu=8G+q0bxbp_8{BeV)s1^2gApy4)jD^kA4hegwMni(n zN?l7T4)i9G;kd@ED9$O}anQqiJ$5s9jn(AKpQlX@b;M#=kL$Nec05taP~{mP4@C+& z#5-*k*O42#%Gz7s5#n+q^nLp!qmF*3v;jlQJ7hdO%V8L%xGAYSBC+_r{(ow!-d&Be z7`05JPG0o{9kntwJ)?-Lig_AWd8hep5~6btLH&;yUZp@7?xh4B9H?DuJ!IcZV{}k6 z)YG*)y1T@u93vPoqeXTspjHjZkFk^G2gQh7v^EY7R!wCz=ofJOXm>j)yHI2k75*vi zE+jJh@s|^w{=4vC^7RnyAQ+`A(b$LjIjogII*H*@W)HPzM6JNaE;0RdC@Vs+EEc<5yxJu-8_pPc*%n<`o9 z`7}_L)aIpbGqwW62xGfg?aMnGy7>9GrIDwDW5eRo-Bej2N}(nWtbRO+HU7&t^R#g` zvyc6OQE*LmFXo4>t5SkE(+^n4PzVOAc%S4rKIDM+=@W^=Fns;y0ZG?C&*yai7qHla z^(Y#}+7$Q<@_%kB5nkNn7)LTN%6ipTC3$muCHJbEU3%j5s)DK3i4JW^u|oE(A|gsg zV?(JwZ|kZjYF(K%^>ROdxu91oJTeOe9(@J1cCfB%docm8Xfc$Zg$MbUKv9-ayJ)!y zVbpGyTzxXwiSt8Xj*j)4KR*GG$xB1+1%O0P>t6j3ZhAr0SInh)R%dwklz3I9@6vxL zn*MPP>B^5Z|8oH7UTQ>`e&DjvJPt&D8bVS;UQpFO4qZwmB%YJFo+EgdHFk^GdnwzB zh1m-4JC|BtJmR^SOu|rpQg>{7__ROlLMT7X*De*jqqf}XAhWFxx=m@#X}5%FQfe3C{?<^YiFN5= zZ2lNLB@JhD`Z!pywWUA6Y%1}Mq?qX>BTa3;n&R4Z;WA}|HEAssq@qc7Mf_wogE50y zO>2ua*p2^X^(*5qgAM)8sP%;_gei_|7!c1nniBd0KhT~1I%dfi+&A>vcssPNh8R)a zkf(S4;Aqv@nf$ZrZXQax-v?W1uX4moE#I1pj-CysD%z|nXdtrtDQ*P1l0)bZGiRkV zQ$>WpxDeAbhy8*B^bkgQqb+hl7k1`Aj_a2o27YW9xXpr0Jj@Rp@v=m9Yh+VOWD=36 z>m?YKVbdANDt;LFjV9Zng+ro6q{WP1PWxE>4nB4#Qn890x`AZzgSGdsv&PhQoDZxI z%a?p4|4{M&DX`IY<@8=}fcy4kB9{ z!1#k|a8f-uv?T=O9!qCqj|?z^98T+kcJ7`Nk5SO8y1H<9mK`wR(YQW)`$w|QNnQjxr zn0Jq%GKu_nv#Rc#xXM2r-pQ}1R$_FCM!mOx%YwP3%_vyCi>{qX`*3;M`t#49KlMo? z*ZekwMsnE?p0zIL0yTDyad1HzLEF%|_Rnba!FjRRWB2%@(E8+o zwUo5?fnHhC&ULf>hP(Yd$pS+_hWeUdctAE!ifHtUhd|6b>+##d)wzLI);+Wvn{Ln`Y($>sL79z|whAT%lAiXuhrA*1n< zoAzgE{}!rQ|GP+ysn-6v_=w{CfTAW1yB#oJ{a3lpEwrq6P2!k;&tY+&Li3nZlha^! zHLLTdR@}2f>uZP(p&VZ9YCE*%Y$F+^Di+**3g3QGjT`Eh)=l_6xpmR{daSKC)>44|s;vs1>G~dF5`9Q%XXb{tGR&YHP8)0MTVpBuK zS6W{#HD)@VALp?4fR&U8?JeM%my$i%r^%{(8_?$KC=F~NjD$J++LW36S zhpXYV7IUtSPip*m(#GtBu<$32Hi&!Hq7OC~v!AFSkRM4qcS}jrdFNIQltM`E6#h-U zi+@HTXGsIcJo|X>7IY=PN-^qlKB|m|ao1pREO@@vts6Hl52%$DA{Y>!v`H&6*R8BXsmK!z zE;~}9JDRVP8Ai4qrOn!Z${)L~Q#>WX_StUYkrE}0{BGvnFjD!`ZDZ9O_2ED`wL^tl zADnwzDN1ogWt!-I2CmNe8FFxqw?yISM5*^%^b0jntQ&t^Z4Ddko6;O*<(k3Va_Vc(}4vS37{#_V|Yw?6OlQw6hP!8?=x6Oxg zNg<_#)2dV?^7`UYt^zTKmt1W;j6{DnUpAE3wqy7o)rkk9&f~lm^Ow{(jF03Vca2G7 z)XR#8hwZ)XP<5NcCezKtE+GXK9qw|jai*M<*OFsyY%Z_@N#Wg%sw;!bF~LBUa8+ID zmgzq=vX~fy%PoSsG7>_bS9Q~aLeOFBy;BDEm!gi&o2hlv=?V_c>p0loZr0wdt+j7$ zZOtAj%&V#zer9E5^6uR`0sYe!dY`_fB?sR7vT|}CfDZE&mP0_E`;wU{c@Do^P(=jD zFu9cDyxW=c9xG1?KbZ4yQ}nA)-|t9PyH^T6+PX`%j6IBLrYcw2t+QT7#G&2Iy&1w5 zYsO0C;C87$xZN+UGbF@kX%@ZlpL(#=Fb*rwaYQ^(acaqOW9;Pa9`t85X*glfWjY{VOxD z9};-{%G_U}NXI==pSCQ0)oyZY-Am5G6PZ};v+O{#va|Y7*4*$O34%*;-vUURhrk_D zE1tCArJz*zLim#_@C3Q~EV2Ml(Z|XAFm)jW2iSuN$&QaZcvAMQ3}#j-ot z{Hkg=<&psEO|sstC3Xf0KiccOHN{nYXB+jH^CBxtjs4a#Batl)FaG;ogvy_-;(teP z=*iP7A9_-@IaQb6ipxA{<#*TzW@}-rXmW|D(z~gA$nK)8r0Nqe)8BKKC&oOq)u5${ z!@UNo5iuWtb_KXsCYKtC4ap9B#g#<&i8t6!Zu>5FZGCkDu0tM_Ju~qgv_Ee29Vk*g|*vH8|ZI`1*@k%EsdkP(+>R`z0sbO z(O!l5-L}ttO*yoRZ~l&B+KQN|F?=wy&W=5x<1mU}8QNaI#tlAZIsS?wAD<%^g8*!3 zD}SWSE&A!M!}pRPsBvL+BaN}Dor?R^T-D7$-5iP>1hvtS+r-HCdEzq$&7*grA9i1q zPCm?%d^8r#Re+607pv^wZm76(Ld2g|5$52El&RLFg%XVNhmy13hE;ay`%W_r)fi;< zp@;D&*zI8Qj?9q_O$d2QTYf_}E<|Jd;Y@o%z^%~iJh8D2Lo^M5F8IB6s==~Den0s&LQyZ&#c)vtU;g3pzLmXiW3k@jAR+UH6q zBqx*$dZ7A{i1Q|U8ZXC?2@0@x?TU?BO~ZmkT< zVetRLoY%^ST$8sw_jn;eJn)95CacNm+fxWJ2!e5F_iujS8dDhCJp7i^(kE+Z!}u^& z#e3kq*1rX!t7QVu82i~>bvbd+bty)-UzXwX1jwap_E4on87KU=1&Kt`>Eu6R0s08* z{J^TMsqJkqvzD3~abC$%M0^@DZYG3y;=_J~}te{OiR{@IFdHLz(ScBGJ(sy0<3)kf-~?b_4$NA%yZGE!`&#d*K&?^>#) zva(c)=wHcTVOw-|lTDj(*H{~+wU^9r6|cuD(%`cu3Q{2B~Gmc)@Ul$?WQin#EV56?r4tu}*dU8en zqj1sY5youRw!c}}PRkM(W;BB(8l_%t3Hr;y>;|g6<2yCV$ih+{nOoi9_2eCV@<3e- zg+2Py@(lMXqb=j{>QJD}kMjv1Wp&g59+hfcBs-<_G*)kMe}>aAI) z2eprb?|UDJwfWCRZ>=H;P4_HB=ox;td$K0V{J2s&tPpRWNFf7d>&DKQ;tRn!3yp}U zYN>~9@`#x!1@&@MHCYl}b`oYeW!NA1R3J}{*>px|uh|tFH)UpVx zweafhVIbRn?;$2ftJe&Cl@}MYB)L*Pbfz@07sDv&7ME91GdWQt8pw@MNNW8*QK~ z!zM`KhFdj4%yIQ!O1DJ1gYv-=!;;b14RZfBWhKx!^Gi6>gkj0;7wB2!Kz#I81>8vX zc-9s{BKz$G#kXd6xLRk@H%r&;%a?rHrq(zA8ZeEeEajv_%^o%XI1L$rT4t{)4`oCB zkbBaJ6A;&-$8@_lu}82v{~oUC9D__h#0S@$oFBusrs+pEo&$LMm9RP`5C0kS8g{H3 z2O!z4Lt*5tLD05MfqOlVSJ`ho+VV%W%pw3R>Xl#>ZFX;QujZk-bGzHA=#EfiBO#Ke zt^;=8Ypci|^?U7R%4g2SSlrSqJM)mel)SQhe4vuvs}UtPj2p@+Z4fr({lrKCNwTn+5S*^$C-EDVVd}kC7QMb*d%rFEg`SL7;@<#$k#3WsF+q5+;$j)ft zds@hHL~88+X9Iu|tl;VCsUh?5tKMy&s%kPqHShVQpQ}yOku^E-^s3QZB-y+}w+M#B zLp6TIzxobpp3UpGrxbkY>gx|rTF>N{bdOgY?b8$BZBG)g2}Tb!C1rDUGQa{Ey~^ zN?ACp8fHE8_9XtdSTFTEr;}BR``6W5(Y00QnLoOY#@SHEGpZ5|mx^*oCZ*`=Y0S+5?PeP3%~<(P4BRcmrH_M2Diq578B zQ!zxv6vQJHOt9nhXaqm!oV({=QUqUk=U;LJ2b*zvM1cvGoXZ%m4*zKS+6EcLELVoL zL)M&bgRadT4eV&gj~x0@?nkX}=3|xLG&M(!RY4&(S7ezAR(mt`$4 zFSdAIa+og*q|b;T!@n5tl46H>eYP){7~WBLq+};ucrM4r(WZ$Arri~9zyFnTG#&Rl zk9rZPOLK2BgYMs`SPUDvB{D|#631J7f7_VsPIM#7)zH+!*eAsq3Ts?@W;P!`G#LA{w@F-b1~$3;g;jSKBN_oTr0Gf2_`<)?j-#rX>r^E z>v;0!emKuA zAq172e7GN&3Tkha_(Y^b{{d&XMoKbpEzcHd!7Nk|$v{u1iQ-8UQKTK2zpE?_G38pA z0_RLc_XzrPg&Z7qe9IZ#)cYf30y--_9~l!vJvY4_oMiVUgldbp)bc}R`5pXC9wi+p zCVwsxh8M19l(DVS4BNr%9DE<|>_K5vL+6KGbc{~duW>Oe_gGFh1g%tHhuPDEVJ&I z>U6|M(LvkL$RwT$XL*Sq_}bdWM5$+Ldb%}oibH;3clYI~p6{BkzS362;-Z}68V@8S-feEWgV-@={u1`;ai2a7VDkEkMeoM|!xqc! zkuvwp*Z1BY66G#7;;(EFA9!hAB&aW^3hBM-KE`4b^nnxP8c)-RCfw3oXiB$COWeXs?I&{{2W`BBMmDNxX_dFM=WnFl=E*~UE{uLs$Y zr5opts4J?XdEM#D%6SVHfWh#v~R_w-hTp?UZ zK2!q!Atp$*X!&Es!vtKw*woaK*lEmDEf0$999?`E8l`+)6Hz0=gKLUsf2(a9rM5BF z`iO>rt!LvkIyxGVjCBc% zHAiT7Qd8n_Eg&uccEg23{f3L1=oDz(gj-HT0V)!}b)frw+k4k3VIw;(dLvjhEL@Ow zlMeHVi$4rAJPz-mWl#B*v{#!){Q!(c8I%KjOy`S5Fb`j$J2%h}sf z&cTI-(e!ZWeBk!F8%#$2BSl6C9O@ax1PeJDpk<0c=NwPr>Z%*-j($-p%zE0lV`>+? z5y;AET_d*t#x?7A(cUqyR)P5U%?u`$DpO&z&8p-!1H(O$EQ5mL;vO&H$qDoq)A&SU z4bH0M&2JSczvCbU^Y-W{1s>KMLHb+5*!EuC;py2d`b&8X_Yj z^`&|PTwPtCvUT_LOai;4^l!CR-2NpTt1B1cITZV2bz`Gs76uR`M!VY~XnDb^{u-OI zK%2^`^1IFdtk2A9P3}Jgd8<=N_yBC{`wx>_pz_7Qcn;ZRJw3e=O+(Idz7^AXlev&( z>v-G@4DvVnO?|86^Ek=O1WD=GP}vNHr&U=7MZ%G&XR<4j8?jaaRzOG;=yr>nL3CC; zMTa*)YB^SCUJhS^$xhvI0gA{98wZluP93?s@_)gTG&#mr<-9@Q?c@ip&#c0v(1*ep ztK_kk2j3?Uu4C7<3xumo+%ggNU;Qpuc^jCy*=Ww_K>ujNo9kD+odMJ z8EM_-Gc0Q~YOB*FU}Hil8_HB4^@?sP?+g&D966g1*pZ?7iU7{JuSe&0WjmEiF={X1H*r@~557hvkmr2Q?kKom zVRbTR^3~L_>1maJ&%%ztKa?9s<|Xc_+Bana^4kSPHokigw5hq}lO`m32Fvaj4km&e zH`6Gi@l0QsxnB{wZN~%X6IXxm#qVljXEhT}Gwe0IlCJW-KOfom%+YW(%wfo6{cA_& zN7F+2km1Jg#t+Bve(HCuRg2=_$sf_fWA;I}H>+Uf6Ruw2g)e&q4+CRXeLv;yAx~jx zmzbR3fw4F{^@A9v=(v|?7Ci)IMAVs2a?iW)I@+{wbJn}#@bf}!;{qwgC1rKrVsPZhPa1p`UM2su34?Dyw6tm zdTMG)`1JVjQ0O!aztrV_<;oRtWo2BJujap8$?5(s8p-wa=~Kr*$FQ*ZRv?&$e;ye2 z$}|;rQG1}CwhtImWdNU53<01%=KV0hnwlx+uM<;JxINHV+w0tSGA5Jt{ZaP43C1tw z%;lM1Dr`1ge$OmjGVW9e+_mZYdfd?0r|sKPlalo`##Y;U(#MOj(!l9y`fH6mvLvVH za|vPnda1$hE0@Q-dRYOx)xWMQTqXX$1uFT!D4mZeHPYO}*$OO@H72J5F{i`c@wgO? zFXi}*aZNL&W4N4Q4-vH?A*z1=Xr&ZOdfj7dMsc*9IUuiBui1pRf5ubO(o{W8trq?V zo*UGUe}^9WMJvZnY;g1baOG(6^&dAsy1?MdnpVI+S};A3mK!|jicj!c|)#t(Y?Gt zGw}F+wpLuzYxdn{i`y(;Ob51%#(iIb(Bb_()hd_5y5EnS+LPrnN1-yCA>W8#3UL+G<8d$7n+;dTdcS>g zjBs<|+oxEGdG83xX37@Qbz5R2vfBe40y#`vt>Mh6Q5`ri;` zoAo!xBF&%ji=Of0w9|S{$1T2iOco&uA62t*$_k{-&0YLJZj2-Ekx#!s+t)ST7cE5` z-jrj2MB9Zm&qFgvZHZkS@4V=;F>KkDoKwi7SU|UBb@og^b}V0xtQmMlM}BoYKUebl z{L@xrl**FF;1O6-5%wj7G;%F}w+^EB@4M+g5AIyqK*(ai8a^0*0BpFl5>5@L4($63 z+~%&TD#=IGMmxKd?OzfcY=bu1aWJGE4h8!81@R>BbqWkv^WNXQs{6T%zjZ~YX=`gM zsnW{Yx^D1$|8P`{{DTL-0V!r=Btc$U`ih~=Yd=3`z>n$S;n6Re9&mmPW`c%=*(lLX zuC5mH&c*h8;*wrY0@f-q`)I?Uix*$rv$zIfY5->EeMMKARTw34S~h z(3FN@u(lGt7DsVm<@C)E%0@D8rVZ9{CF;;OLQTj$@ zk7kX}SmT1sg6sQ?*;REXIlU)+)->-Otfag#Ng1P&*^1ac?~r7a61J;o8GSrc9b~|H z9{2vyM)FrZ*7wKp`DMjdI78kv7zsUx_}>)K9r%*-wek==K7U+Tr4h1gjGO4aFjDwWA@zkuY1dzlgy{27_nqweXjSMk zAEO{GyLis}_?UlbG1JD-T|fH%fzik+@U$39HBNy*;5unNgNSz=yZ zzJ7T3XtrnR8lKt!r4gY#g23aGaqUy`BnrK8alcX{c!`(@45;j1AmFHD}B5Cv56 zI&)xgZ5URZPfbnHAasm(DP=At2YS6LP*6YPVSG?YbG?U}@ML>!+ZD)*&&yHLzYT_; zH0ndSgm_i)eNnV`N&kniw+xH2?b?P7Bqaur?v^g;?rx+(x=Xq*q`RcMk?v+dK}~9~n%x&pNwY^JOq}1Kl7F4KhkjAgpI#gxqMNq#X`foQCBA)wdU4W+aq?zvj?P$?*w|GXob+im2|fL z#{tC+{g$^4N#Zun>2$f!VIE*Kb3i$@)c&6NGSqDQc42*jM4-YV5HE@$oGhI4zZSN~ zr;x#=qQ|MPNNjq}@L9z&wo&sQi^is$w+KPS$byW%8v$K~AYCXb;XQqYE5tT6PLVg< zftPJd+Rr8SAoeHzLv=s*a?$0GLF-lnV2x_rQ!z`E~uOOODkGT z1|A(BW4cI`S5$a-q(QtqJ%=018}=dB*QGl@=E`v zRi(X2dkfXaa=MVsuS)!XCGBycBVLI^^do ziITZd*pPMWf(f~_P&xAG7c51IJcbhKx>w047u^Sn>B|gsfc}rumaczMsO(hucvvLuCz3wIKCRJ&Swz2uEr`S9{n5 zvkGl-)g_2@7}!&UxbLG*e>D@GdF_W$|0y9t;ya&K<@&k_gTm*4!{5;%MUg;No|#=* z=6(JEJH5rJ7GyhXe`8K)MPcJWXfE6-#RVaC&gsuaHmX4u5*dKl2ow9Ch}dloc_rOuDew`b+G59W z-CS{LD??+Ryyg9#q$wcgHd99HAg)YH3LvEW={En~$s5fv?hM- z#h!CP?9=cT!-t*k?5bk|M!l=Q>}&cD?pdmi`j%NY*A%Y1S-=BcN-LQ0Ip+PMSVGpu{88?9n2Gb zD%FS9_!F5*!h)&98nR+6H2NJ*OeY>m4ZGT&P~p5l;k+o}ov&7*Hj73<`U{Va0QcAP zE=(Z!*Jbg6;Ms|n(}(;~FAqsWD6>>K>oL*o7Rjj49Bbk8Z(<*9c^?kg zW%wP_KO{po7X^@7vHx{Hz7!>soAodWD>W?}6^}j9X#U}NQ$j*QG8)SyYC3yDMQ0Uf z^or{1*=jJ@u9vc{we`Dis?*BKN@6t`?ZVO$(gGp?#O^L`ZjxbPVKH-Qrs1=3a%$kd z!Y3rW>ZOcAfZm+-0gwjgjzMFC3K)oR;JyzUN@k*NcQ9p;R2{|EcmH|bOF1IF#+9l* zD@10#&V&DU?{}PQ_u9iQC!KYVR(P`d#7O|4pVo+0{h`(%kxFq!Ojo|A8AM#hQPAR8 zKCYDJvIA%ZheB)t(?*-)@cqzzgx-d;lHfJ!f)D3%v>h)Yoa68{Ed#J$~+F(hNDS z-Y^ZnUXq}VnjtNII9n|fH8jj0tj9P+>*DFJIW!#`)s}>pDvB$>{ z2h|meZ^mN{P{)uuT{}5kBc}&lr5Ejsm|n3#?gO=KeCNoKQbrl`Zg)dMMK^C>lNY7k z4;xb&=DEhobaQik8-0FAj>Xv*W-Iyip#-1Jf!h9s&alM4doz8aHDwnXP_Gp~Ch(@X zvt_Kq6GUnUY7dJ@%i=saE842sQyyPaUFKR-h4qT_J{G3P_JCJF8dMX;GB`WqxFPpA zgg2_I$2)_j*!6rcct$(Dvg|F~s`9O+aGqWXOCsxpPWm1_RQdM6Ym#k{pa3n*hJHH7 zw=>`?>wkPP;RO+cqaJSbL%h6Dii{EKrhvawX3_|Lv>4713V(e_au06iLfuQ zg`{u7FA!-}Q~u=Zjh1k^YCgMk{>e39o@nIV*H%hv*v-2S!U%vN&fl$&C?uv3!c!yu zCidxsJ@4Xtk5WhRRUOgmUnD=pJNXSa6Q5WE!#+!7UY2}%<{W(T+*%m>fe5<(m!s_O zfp3EaaD*PO1z7Z6DTj2HtkTbiKd+l$4IDT!!JYh@c}m4O9Ei>(WwV-pD56 zPX{%$F)D!%X6Ic=X=Up%Z zq56*b!ZB)DPU#dpjRCpg$;E=<4Keq(kZf=C82)Fz_yLoHc6yRyJ9@hmnZn5CZPo1i z@1P7hb5<6gToE78Hs^^%S;1Ls!w&EqZlHIsM0I~_@Pf8l-r!QJ7;mSfq0U$FfR<+I1lQ+)$f~LBd z*y3VArD<>s=>80K=tEDLHohdgO~yHnTH7u2clrWj;lCcsTeUP^ro|qB zuB@4M_4<#2-_WALrJ@3AXD5fQcbei9;Ou z$oSE~7ypj9vuue_KHPKBA~~YjWSnJe&pxct!5i}2WK-X#7uVDe7{ zbiq=*@JP@g#=>Cys+tvMN9(A4Et_(>T0mbVq7Yn z1kicJ{PwNd@d9+^0TMA2*5fpiy!e+%KPJCvcX@F!t?3~(1aPJUuKPrcm&^Qqb2ATt zSI{60TYyvJ9(jFuI5Ld73h3pvtY^L#YSQz3UNrLpj&{OtK)_#WbIFcx%c~S+93`IS zJhbKUpJR>Ql99qcU(B(iy$j?=y>PBArOx#jgv!H^$gGSEwV7SG_Y^$-=4F+VhhMp` z3MX`lN^{u{2Smk#7URGcd;HcROu)H*GiApUwSM%Xfc;ecWamIU`@hWUAg|3-1NKS5 zRAwtylktMu>acHAs8H_~;;{#|Mt6_2hORf%f9|H_-Jyerld6f^oSP{ckA|GVcWUbM z^7-yyc8&|B^eM<5Hs%;M2W{5zG`*_OU2mfpnZKL{_HPuz?$rRe30`Jk#oN@|AF`f8 zkn5|XX0Icx&)CUw=$8Cwyq@c?f+ZwbYW+IHIxQy+N|^H6fT>%g|AzJ^Wgz3i#)*7imJ9L)GF>HC>N<%Sc`$F!Y*fG6e!;^d>)ubeH zqp*0_W$`gaCVi7oO>!q5O- zk0JW&&ZD?JQGJ%cjKJ-A5_AT%)AFz%(EEq)#3kOrG@LzPTVP z3DZq*5o=ljsF@-{rnQr_U(&^~d{;t0kg@A*2~riC>;eFx%fQyw`C+ZMTdIM?`S15H zf7B~;v%wO`7YGC(SM~_p5CKOVV8HrqzqbO16L-7hM3eFS%F1ds)U)r`!P$guPJk5u zW2~jqr=?^d90e#Zof}sqlvWQ4IZ0C4g1X}^G(UTo{bir|JvA!$B{oW{u%xhE8ZjIm+jKHxtcQimvW2ctlIfy4V&VPwyci*$LaahA* z;cMIB*i(IEG44Sv(lsT368IAj4eWl;9{0`*T!3PpT&`2S<_J8rW7J=<|~s z1nDe+(Ba-V4emle@zZDX2m;XD0j<|~ zP5YT?>&J%(CNRxr{Ge-BDx0|&LtSl#Zc8k<|EXSWUF-SEvm{Z%sVCx^-$I^9!2)QP z?k|OqF8^PZ;3(F!$1Cp~>AKfZeEGRu^S`hDlRm+77Aw{)zfFJ<$O%gmPT1%B$)~Oo zLthBzRjYNi=pc-7@Qq45Nws3JsmSp@FdYvW|GT7`rXL^7Ha3>M)BGRz66Kr~!ABw({@NYeDTs*B1&%hUm;F}P?&}?5QZ%V7{hdUd~jpNlPUjpA-L%!!ACY+zr zdSkR(|BYjn~sJwQ2zI86KS1-+-r@=*4ik z$dvP4n%v`pIld1SCvJcXbG7~brzTzW{Iy>+KaN_c#58@ldLA9FA;x7=hkJArYXN3J zjt2lRzOa3h9O#}DlvAK8y{S2MD@D843U0-By7G|UHf^p&=~x;X*4!n()O#s&JBzt& zAF=@4av!{mRexUCUN(ZTC=2cQa}T2?pikWJo&51C=7>X=cv1f1$Ci}e@r24_=(#SY z{Yc*Js`|?qeZwx3`{%{GKB-f*R-~meCit!3)Lu4&3q}S1W|46FY4a1NpX=+>74iBv zcML-JRlXukK|rZHe)sp%wu~kL@jgHF=d{EtcZVo%MmPSGl`6W2K>{h>`gPSEvVfq3l*e?t1%B`jgUgci;;Zb1G3*mzh9Oay}>7Jz$ZbaE1X`$H^Ma7YNpq_om3kEnYVNk!7B`)^m(UvT#8fYZS zJ4r!j$@l*%h5a08>~ZuKc^dO368OBnu{fsV;14BaQuQn?W4a}waR7ob4Lf|e z@b$cR+e-=N@Ee`MHPz}KHi*{Q8l;V+6oMaO4U7#>9wrHKk9nPO#(bVG6NUTQi7X!X zJ8u5m%L;b)@}8w^;qt$_{~hD^ZO#v3TwYP$<)X(%!`p0*DsXvKWqdrIJNaz}87dNV zpQqgU=_uk)^#;crV)|^rFh2@iIuz z=9B)gD;V`-JrF{+8DVy$Bzjdb0F(sRz1iH|M_0d@+~Bo3S2;qJ`4=4+>CL-JkqtO| z!^i9guaYIF^T3orEB&Z`exZ#&E;JpT3w6(R?|25x4rX)wp>6*OSO-g=EI zWXR!#v1Cfph82Bm6=F0%7brffi&qm{RHyIhdAeHeYZO* z{goJ>otERUfw(-x2}<5R50K*X#L*E4+&XdI`y`troAI@O+Id~D+wed*dbaxIU6EP^ z2@=(8EcGr(JG{`~_4k~~+1k2OH?~;7vo5uSmJ8_+m5*RRoQ#&+A8V@+fwA92M5dB- zfi_hQTvyq7;h&$TaOq__phV{ANu~Ee_I`_jtxKquzP#`p8mn-%BN2fS%?0_LW0cX6 ziM>iok@?vOK(jwU9i8@Qrp$SkcRMP1<=6CbzFcu9sZ*a5vdNgpLK2$BF*7Zv8jl{B zd~pXPe+yfwdO!1AtoaZwtUY0Ai{B>{N2a&|BGA8%(Lna#&OK_2=v@9WhpCL7i!1HT zkSC8g;Y;d(?)kg2P!*qj3 z6hAy%>K=gx%9AC2(H@-#5OUBznw=nrtCnSPrrBwF{JQ`E@3;RkfSTX{BNo!A&uq`l zs_3qA7f8WR;G>J%K4`*P+FqeMW>!a4adqW#Sv$$;?3TRyqrALa4P8%PzY-7a=wl6K?^djwB-!{d$iZ(-%u$l%R`$D!xU` z6pAl{T|XqR9{&`L5e$y5WGqnmcs%hoALt**+8TowmYM=Ct-BjZIzM@3qa_mKbt*R4 zI7Nt;Gcb`)Erg9`5m7W`!%9k2vvY=cbKsvM6;tf;)Y=obI=4G}HE8! z18wy>I`$8aM6-#86{r&WE2{D}ah>fI32TGXeCjKGL$15mdR$8Mm%dr9L6yiGe|gMK z1lo?Q7E9Qw>R2p&p3ZfhcV(K*{k+(i=u*lK7~IyUe$IDO;_^cPR6`=4KDMg{ z`C`cX-Lb!@&Nur7!es%=C8^2Lx!AkQ5hQcoOhVxP&9B%OP&3bwwV&X-;QtH;b5!4E zYHNQYOV}*t;_C4c(!l?vZQ|Ius^G+Aa(=fvN%L%3TVmykaQZ;I`6UoR@_xf6m&?$| z8#BzOCo~AYfw5d@MGpq0QL(pV1;;U8_tL2D!sj=3={ zVB2w>90*<|2A=8I)^X$8(Jw%1zo0tJZ*(-9l=3I<$n@;*Ep;u|Rok|U8;-HyE)6d(9%MNME5Vm8EThCF;S)^OOblG6p94jyw0_! zTyz%gtsH0CGqOe*Z2exogcFJTo9RsMZ7|fSWa+Y%e}38AM`LU$QS7d@nw+GeHCHtW70yK8!~=ExfH z{V9Ex#y?k|bq}KWa?pw8N}$HrIbZPnG%K32Z=nP>Jb=9`*5Vj>ZW#U7`S@G2p;(Dy zdmV*+!(DNq^4gp6(M*vGXMpe!ubq}SqRT|w1dtbnHy8A>1^AJ%{}@wes%VT036(9K znNf#8AntRSiHV8w0VbZ_LmBu$h!Y1gDk^^5Kx%5LObXzl_1aMe2860mJ;a2B1T#9G zNFe-_W6w5D8c1;hWJ0FGoD(ked)AY5F;(2Ayx$v$W%j2%?AJA1hr$!d7!STT>BA=W zil3|KzjO{67y(0h@e;ZhKx#he?|S3cEv}3*lKAQafZyQTX$Ye*hzQPX-nJE ze{&>ZUTw!S#bXtw>(KifRcVmCzO{*p4!LDLoz2lDhT*{Js(u0FRYi4eb7*Qhr=#uW z+w!Uk^`H+m19xq1jt3*0EM9vkUw4ks{lrj1qa&jX*-jwhuZzo3-;sY*m$!AXpo^uy}as z^0R!_N)qD_$nY^ZhUrE%mTO!)*s#!bXScjeoZKzaSQIO+gP^osrKf4c)9Rf<+?S+ z0_4>t(?vMP#lBCVpE+_5kj#Qc?nDbdqluvSR+c8rGQtELLZQRlfO(k=Fk?Z1BA)`j zZZa_$>&G1?4yI~A=oom+B_da*`tEh=Z}&wYMrU0{=jY0cfHh=kHx9wIy~{x@Z(*C=wz3SZhcY zeHHrNb0dG(1U5_#Htb{Y$l3eaUkXh9Ni?semZEd4eK*9R8Oe71z74juQwZn_5NHoC zwlmY?LI3C7qD600 zX^XF6WLXaK)n@gnH z5n1x7m8j@b%zEmW_wQbOJi=dx7p#mOSFWPq z&{~FJ`;k@Z;-H%!m{_33#EbM67o;E2?DxUJ)i>+Ha_x`NVAjq74$T|UKpu>N!=Ovp z20!T8@(;_UlF|G+Z$Z=eW4+Ahi%lavutmM^5*WT9=*o+HwMfotvC->D$)|ClZe}i0(Vo*ypY6 z9CeClLZN%QF|xaJjQ?QvSTdP^3LjS$R$^j`q>c%NHvj0?e^|M(6f;vxkU%6mol3N` zU~y?^F5M~|F!5pmoe} zhbl$#^L20|(of(zY(bSScJ}fp;eP#-^>i6M!+L5SQLL*!Q!kt$BQusmFX7ENtpT%b zJeREl=#Qf_etSi^dG4%neJ4LFp?rhzHc`veWf21goH@`16h|A=fnJYq_bI+1qbC;S zQ{QpnRS?9FwnO4ct*{MvxqNN&_sO1%1;wA33^cety!G8(b=+v&bFj_-WZ?zLEKRuJQWNTQ9dp=;SES!8AV&ZIvbc zZkb>Am#_x}V%WAl94xrP6l&3p<#4AzUCcP~_oFs8=L_1Xwfc5@+w2*Kl(~&sDG6M2 z3C^gZROFz4p&rF z#Xjcz<%`ho_UVU*_FkuukPsGLUhB%J=x825rU%IGP=V|9>vkwL>x=oR6bYNL|1&%8 z41ll!qf`7I0J-fmTnDQbE2tl%`}Em+Z{e@Hr_;tP1TE;3%6zG9Z%mgSuYq;z0P(Aj zGFt?WVI;E;rtFPnCwB`WvH?;(jzRNeEeDkAH1`P|cIIX+`!q8h^Va(0>q-4ZSue{o z*QI}r*;45UX%9Q{qn9CNAvC#zgJPdFJ4~$V_-78dOe@Gga0^eh4fDsoNImdI_aP(Pfc?lP&5gSNQ$@&+VsNQj_{Kl^>Yl zwIv2Zt(lp6INT0h86Pdy!leps8;YAy0S2yr|529%-)bq#2O8OBB9Pp-xza{eu3{HD zQb?XE#BdEDcK9sAYP1zw<~5D2;m3=3N!VCctHmQWC~f9v`l@aPd}KMPGY3OmkAvNL zjZPh-(0Xp-Iub9|pvo*e2r>%Uk4L%-GbFY;%_)~Q&3>H&*tOyup6?FmzZHJm97Ll~ zxDYDtx6d{x)*9X9HMU*!1pGcyaWl1Z zh_;)_}c+p>ADea5O?PA8lKmHK^DuTQwwB_kq}f!Ot$FL4Fg6~wVX;E86^Z-@IY(qw}_ z*}1wDbo#vKhjM2(cdXGCSWg^c9NISHPuomcBiVF!mK}YHN}B9UcGx{l`2yR@Zno=g&XkM7EzKg5j1b#3->7f$jYyO;OJ zATD->zID%5L~c65WF4!UJ3X7O_id_5uv}#X;oDq*B`QNjt`@<^V)%V$^T=CgHi{U+ zaocX+0s#-ikxge85`b@XHCkM?K40vFJ@6ZI&QYH3F8zT~BgG{JgvMR`^qE(2UXj}O zB-^}*ej);5Gbb=Bt?$ngVhCQK%CA+i&>KOCjR(r+IrDMMfdV4v7|ErEU|8=K>bGej z0K)*nMlOJmD`57me76~&X<5(-c|U0&pl8*osvH0E2?|Va#R*SZLL0|TVjaGGAJ6JV z#!!EcVHJrELBe3J-xFVSVhj*_mmi21aD17K6k)$djH%%bQdfA^ou=WM5{YNK~gdVlz=&?V;?)nYoO)M02mxe^;7R433Th z9;%X?sPO{M-!DNN1IC7-X0a=fEhF;E35Ica*+whR@?$A85e*? z%G|xgl>z*sIjKkj8SO`z_}X`+1w@%8=ceg2{?cP4Y?RU}-+RG#BlbKzqUxi+aK2<- z?iGw?3!Z&P+G*Q{+1_Svtbi;232c%;WwK;CDeQPDUaKed$^ZRiu^bp22Xr=*dgI&m z@|$sB_5d-ek;Ca#kE*pwTH@(pU=f_X6SoWkoec!C098NeITR>ovvJ{5chg*I^z4RR zn9$VxfahxJh(PDbtQH6_zFnz^`YpVA^+hpMVLdnO(SnQ1pTgt1&wNe9_oX{*>?Sfw zeUcU{!T~8r3BUW8exZ@g8?=m1P=&%UJpAQkU6?B@5Oi~Ndh`jbtEG(s5icsk5X~nq zZ1#Mm-BJmP!kiFmnaw{_JRQxXU9u6QQGs1YYN6kCUL|{DfdvV!8`!lYC*t}C{PXqu z=*WHOqQ6?}TZBvv;kBFcc1YLV@=9Auhs)A*kchzCKWqP>=*^yH5s}LQ=tJiKIRjD? zb-YA|G7Pi=T`jCdE;UQud}DO{myRq{sa1YSZpBOWDm!)c2ElN zHoLzu2EdC17oG@m^6`XMt_naPH%HJKNvNPL47SVW@6(J%)yb^Ptlvfpc5~{Vj$)Vb zL9Yn$R;&Xh#lNUTPnr4;y3^#g%r`H zoB5S1m{#{}odovgeZJ%zDkue$_&e1cU3o<%u3)&Lc$c%Iukc*W$k?MRzgNR((9X&} z)a~Jhw0;G91ZwN%n^c1$9<*|su`>E%eZ?&~@Mv}#l8{poqg>IclQjsyh@ECt0!~}>WEkS=)?do0?PE8e#-Hc&|-AeFU6bh=M-Y zr;<%**mYf=_Sh=f9t1y%qe*M*asHm7r7(Cos%*Y+LPc=SQlo6E@uK*Y6n;}Ni@!8^ z`%^zDJ55V-L#X0c5As@USzuZ6$nnt|ybmegAH;k0n=-}MDNz9F##7})dzazVovRyJ z4X6InGJFnW`4TPf-a@ zf#wh1oWcIy3SXi(cJ8Y~)v|<0lYAxzq8t{}iiQ5M;QzHs~*%|$$T zKQj{K9=TP8zT$t21if~>2X8?UE9SaX3AR#JK3$=R6(kel%V>Z8;1^awo>CE)%lCa<9Id61$z ze(|#;1V=Gj0C~b307Np-{iSp187(g`Ab(5G)?p2{Y zlTsPDXn0wfd;MLbj1mh^nG}6ImDq-cPvoo~K*kU-$#MCn(*|Vj1O-?V&PCPKgW0W- z_wV1^`J|b8Eo~s(yY=YbV?(M;UtCv<*Qd14FFp1D6!qG7^N%*Je(8R!Iw>jnJ}Z7B z`Ly5}4YTd&@^!Lr+q6yfd$JnQde*|5;}5hu=V7$!7h*f@gjmSI>RB7YhC?lIL03z= zif=)ULA&PNd6m_!cS+dTHC&wLy%&Hir59DzQ|NlyY0Ow126DR0LKZ|O2hCB+sj?%o-WmUG`QO41cNP11@2*N$h+PF`(HjRD|-dbMjhyM_f1pA}J82 zE=#~zy3fSKLfFPc$L{p;$&!SPgZr6&T}qQK25CPxzrs<|$a|b4W-{iFM&GsgQ}}r+ z&h!cuY#G=7%}HiqvC6VRMY2=bXI82Fy?Z`XpwW1TfYaXtXW z%fcaGcQ{FvZB{3d@pW^>t)~1@n;t98_qr4qLdW#^&ju7!&qOT-plE3j@yj#OjmCy0 z`x7YrQm#w?4R@Q)VeGS$tMw5YsYxHnSoxDdMswJvmxi*pLFWtW+6JFU2PBD@P&qna z4utegoF8RNZ2rN?fEu#MXf)|zYs5XT9??8Jyd_UUPmiv@&bAwRN{sor!29a&bEQH} z_R7tih&K42+^It7qnOaSe*S)UrUA?5eof$G!I(!*@wxa|;Y#@#a&45~+@A!T!xbVH zugqe$AG(y;R6E`|~}_Inp4kw|v0PXS=!0xwPC7~EzN_}7e` zlpqHr+-eRO!^wI5n78o~Zn`X};&gO?*^fT=&bb%f5tG}$dM6Mgi zj_Dv)6Y%4ECK%6o$iG0Un^O?97`3cm&%Xdxv_E2-CJ07(BIx8Z?(6a&EiBCCchAZc zV+s3~QhSqw|L?K>zX!a4=;F@X^k;3YyNS4%ihUwA$B&ybD!(IR$?iO>pKM;FiX;gG zDYhKx4f!%SbK&Ot0C7{=)`kyYYgJiUM7ZQmpFe-5^`K{90Loiib93m=pTY@^k+~zI zqdY)Htd*JB?;%lndHGZ>GWL(qpl_)H2y09@DGcR9GKjkb|?o_{; zm_2Lq>@m~$T%8A(EKX7F_T^Pie!j%GYA^ZY4n|xb_@^+r$VZHU@4-A z%S(v@6`Mc3%%(;VWqvSyqwb7{uJ@x0UE!hE$pj~RAbAYmH~v-vqfU6~aGcUmk8sph z=X$(Fzgoxh-9W{%~(3|cKfZ59#nJlwM$trwi z7nZC8secJ>NyY$`bz8M^i0;DYHN3Y3?9K7du;T1lOF~u;cx-*24;qj<9}Va*65WmT z>4NHgRv79|`K{_CVT(>j5jvVC!s+w-+0^@wH|MhaU%;NMpz*bWYj(NECCl!!nRE5q`Me8W=ON8IoveJd{g-b0KFaWy<$D@ zxp+bq*_65GtpfsIXbrmfuSWo1X+H|t)h}~M zmk%tUogaTsX4dh<1U9|@pc+FwW1B2oj}AJZ1N$N0*>}Qjr(-gVIg_vmgimW^1x-nS zhBHMRH>twsia^+RS(|{zMnah_q7~KawWEW?{Z_-X5jv+I?lT%GV`9D%*Gq+s8r)TK zzhtd_eh}P`j^6e2OW?bErIO8MsULNHzG9zpefA5#|8ex@^~v++SU%5JKgI<7xBG~L z5*F_T{`%iyy*}9M=NdRL$!RFSM&uM zZH2`U;1_+vY6qTqH)&q?c=|aJs5Ry|AAPWh%u8A~A~#AmY@A7OW!v~RI)}bePA&K! zHuPV^a4fLEhAQkr#F$J#OQ5Q~LFUnrhlgj_Gp;ts-k(+LS!I@c`1`E1TGqIUxp{FN z;H>F(bxFO0jRuI1Y7;lNru-(eJP$41S`h<-Y$=Ac_PxD5LQrZ(dU}HK97Zw$E-p)2 zq-W&k0j`tjY0Uo#4H>yoqb;POrmhfQl;MaF$ahn4#t#Bw*_`Bisji0hg_0VG9=F_9 zh4Ec zxe)oHt$rtUgFjuQ_HFcTtV{(G+#OuFQdvE7ZWVGhDjA}#X`t6*bB-e54kaWPnKQt8 z!k=f0e3T>-s?qEkuF#RNP!xMJB`WGbf1aT0x&lwbI69JU9JclY&QN?QiPP zEzpm;C9YXzBGu&|W~dY$0|>&K1Ty;hnJEm55O{h33VhEh>mJtB+Wu|fz!HLjf~P!| z8y6>p&(qcx`6ZuEhc$;$0NW2rJXD#b|32pAS4|%g+jXeLe)qB7@`J@>C;~v3!sCTk z7lg8h_iw&M6|{jNzX2xi?gYinlkAR25mNhJ%z)Tda#Ih@kPmIi^@MCdSLok+yqG2} zn0U%;d2@YZsFZA}R?N@NV-@&GBRQ#_pZI_eF&BI`dmWY?&NCb}lq~<4a3Mn|PZ9rH z|3@brvG@2qnSfyB5ItFHSu2Wcd#Q87ni!v>`&o(yY%9d)qW6P2=2$AGCFA(ThNL zx`*$hDDl?tEcqr^+py#P~6EUhnG~^XVrwj+k%t&&Ky~ z12E`t&VJ7M5o1SZNT(2QK7ZL2eU9#{rTRau3DV>&n5yq<_7Bfw0RTbPG)r0v^K(2OH&tK%5?jVL&O zxEIs?_>AREL|B#rdpL+IJA$;9;SLpY=z4n{rYL;}l6)A1GR8-p>%A1Nh1W0J)P7xJ zM>%|*ayF0k-V`p#5)^hEzzcQvI`6RV_c{776*Gf~E_p)=#9Z7iV?YG|enE6KyF&Lt z#3vrnzRJIIT-XD;JuE#Ozg0>SF1ZFG(BJPFNCY9Z5q<9z%+P~nve9hLd3X%`bps`N z|KWzSNxo<)^p#1)*ZCVJ3+oVsA#xgiC>MRXo4{aEHS@m;>fh>7A71;VfPv~jPvzR> zdonX!gj_gH9&LmSo|wtxZ;Y((?h7`b7c48Qs?r|;ND;6q2&G4q^K)TiEVKciBtZ~uy8@9dU8gqkN2DMbW`BT@PpO+KPy1trB=)(`o@W+~U7FFMvlLY&(HII< zdW1GqLT`YmgXVLNY-`EX@F2d=S4RPyYhtvC>>^*u-qXDK3aFLx+Nw|wqc~&bsG@{2 zi9wX~m`D!j(IDpUTt1?r5(Q%nShAZ5Zst+dIiXsg@5`IU*GBFuK0IM<{0ss#66^gS z@=}`3P=&%yck=Sv^0uZif|0Rd90Sw2&n#Z%cyKPd=X+g$VnIr3gA8-eDnw-a+?rU~ z!$)5Am6w<-eY6vwB`_b^Y@L2~d$9 zL{zVD|BBGm)BatmrR(8@>LxOWfk4d!VrzHWf@K6hwGIr)>hPt@6h@V7=Nd~!q2Q>aD8r*xEe*S#e`=1JoT01biE8lF*X2roLONhka%8 z%G>oY3<;8}B%*o)9qmdP&Xo!OM^wHqy%=yekrr!JDeO!~_0&vywCY+3t^=+uA)@)l zI8$IumZ6OfuZGS^iBR=GeAzMSgVj*xl28qS5+BAJr3d;Q==w<$ix;#JbXPvjB55Ms)ng}-c1es+tuel6nF&;t0p>P6HDyd*G3l}MG2=WlhD%0RveNN^ww1}1 zi(Z}183XZIIy9KMX30tqe}Izm2YopV-%PmImF!?>=w%Jz5g;akGQV_PVrnKV$1Bm= zT9O;x>X=U#drEG*6Nu>f0a88}CemM20-gTOwNfk18g@M$+yTv8qCQf`oqaG=rhMie z$l{OuLSTIMsM8}iXTRdxKIvk-h%%^PRI?BG?tyTnDHUg*#V2m*8@wD!lhAvXQoL|1-jorF+QL?4Ul#I;g)XF18%yrbIjA_+%)Dco&R zK(5Z7KMMt zzycsZo{4X-cq$^cz0&as?#7PKUvjE=bq$$)i*3a>j2DZ<)}h!5dS8YS&~XlvQovBM zlu4^0WGe8Y)~Fqdz1BS6xlwk%tOdo|CH4CAOY!IToe&EmqWhOAWwZx%>m)1Ro*sop z9K4;bnx0y`DJGs=+WJfDlUDQ$GhU3SN20?)kgjIvfQ>c{Q#HTvPMn^6{PdL_yBn2_ z{0+&Hg`GG8j{hKiy}xw0O0iDaH|3wdRMKH^oew39D*8Yvf`>WRiHt#yjA*}BM-r#h zscFT(Q_}Z$AMn3wg^0F4HJ)Xd{Gi!Xw@K2xNn%a`HI-$U%;!J7lx(swA2;Lm z?}52r28ODwt!?D|@Q@Z5`iEUWN%bdaxDudLU0vPsc`jaFothc+W|$J?1ykGExJ6Kd+0Tm%hw)uZg3ux{3O3ZLT4ka?GmBX+0C zH;`ti40;vVC{SmJ462_R=YUlS<(=wbwNL*BGAUsYIPR;02%+bS;YjHvI7zd+P6~yx zBgAupAbav)1my;M`Gh(rYcd;mqMwF6TjC+={)Ror%QjBrhMYESUV9v?4+n~l>Zm5Z z*GC4N-#iFC(OhDDeJ;uj#Bo+0AKi~z_8cCzrP)%QAzl9QXqiEwgrocZQ`tT@ZJHBr zD}IT*KDop%?OwEG-)yROPd^Dop?i})#c97eF;zS(}#8xF7_g!hk0<70!$J~7dm zJf>7I2G4&)UqH!9-FA4G+lmsnJ#m~%I6sKw?o-68{LpBD>xat}?`NM&M3F!#(*p;P zmbdI2wQADjx>w?w*u1mZVUdT+(bp4RZ=A=T9(ScBcljl%?(byIINM%|%@9+)?5{^! zdS~HDOfFLYhpV#+i?V;awh9P>f`lL~t+aF_-K}&;i?nnMC?VYq(%s#qba%&$ba&VA z{dk@?{@=U9h8uD?&VAiitaUC3{n>8Y)pS`)O`xg32|k7UJA-`hcDJ&cs*f=x{#+zH zj?dk?yX82@>s;gnkqx~4AfDNL=5%pKQPvQ&FoBz*qrsH&_jakG-|fC0OLyvGTDil~ z^q5`x`SFx`_lhD@iA_6titTV12eZ&!((DkBo#AR`Ypvm6)pDraNlWw(CrYYIHNzu{h+=SoR z*z;qN4gcY9k7vAN&Y;z4g}p4Z#=e+6IY7{NvF^O#eE9FGI)?yXzHhgPzvbYSoMk#p z@f8O>iLgau+>Roc|4A@@9HEeD1-KbLtrxt)KlVJu2G{bk$vRdvo7OX0FzHXzuPz*+ z4Y$wMHj23&!#w0#hjv(WK3J^2P^s0NTYq)m%L;evI%!sY;tQh;W=KSBzX_~*fjR@6sUR;zU{LfFFGVvGIs%Nfb8Zr2j zXBdC+BiOh$jIb5Zm8Z;qh z3IT0rb&J({?Z?=7Z7nUkU3XUi%Hf(lKCa+~0d#t7Y;2mI_-pgepC5rc&{rFq5nxK* z-`(A%*2?85PDgp@I;-$(fwR^DWH}f7-~#F$yY=V5_oDW02OPOWl9`$gy=3Jb`mV!h zKU<7w1H6}yArX52AID`Do44Dsm`4EF^DY{1DB?-%STWG$vx)DdHDTEdt{fLge=ojl|Pz z)7D*c_+<f-gM35FDEW+FQ?4-EUxOHWm=X=PEb!P z2V*4GTC0_q)>{%2E2yYrv+L-GqiX;8fXjtF^XYJ=7b66=4Sz9Toxlz$iSY0TGo=Jx z@N{E}U@mLxYO`H*HsVnrqrVwn)ah05!EWrhr=YU!Tk{ng7+xr@5b}8>aZbv-9J_V= z`8q}>E_g;i8n!x0yLwXRwh_uG@@}yF$QHIWJaPy7yAg6g--C>S*hJ@lOS z`1ZeQEgX9d0_#m8pVt^}EH18%%#EZdhtAs18xI$J8M_m4dzF`u#V|!q{ebuiQzP0p z6I`oh7gHu{rW>ZmIdcc>Diq=6zh^GVPBC7@L4!_Z#-eY?+kUakx~kqBWnMrIJW#1s>=M(Mb{!iFKDkp62IL2agA{P z!DnyxKQCZdXBJbK^InBQTY7gMF=RL`@pHpe&++Y zC1#YN>`aoyQx$LJ7eIV2T*T=9#?$oLXmYH;N)T@+@BkVwv=3ZZXZQPJM)$3rK45E` z7CSwH^Ne30S~}z8;GRW!IQ9EDp$NTAT-rAzoR$k$nYlMxrljHq2X7LETM#;4CUBlQ zv~Mj4D2eAPOvkCNGPU$ftKC10?#W)7(<^ti8xeP@t(Kx4Nn(hZC zkt)~GWBy`(1`8cP4bu+Hqcv#!9mxd_>I=cVs@5_4e z7S`e~)39Yvu%;&FBNb{1_K`%GQB@sOYctR7W5PHidX0c4FgZCn6h-d(SQP+%s2>#l zV0Z?9jJtmO_wSo^5FXd398l|d-?flJArbo7z@RN!tb?kbAozjjg_1$f_^vIgPk#Iz z#`>&bsnT+!Fzv3eMnZ*w{Yb{2htg&Fo#LliCask7#sf#lUv|4qUxdGMuKV1e^UMN) z9-ZGxV6RxN(takG>7$(9NGp`=ZoY&~#_!a+af}`msy*pS`?{0c9h)DY{-;cVFm>m< zPtX>>#ke)W*y3923y0Z_-Ba)5B5A_4Q6Ytap(x6VvDmZ|u#9m_|wSE|Aj zuWFRPU$@8hXWvFDSym7Jn46#>c!}$nF+Wn438Flwi1) z!+9(gKx5|rd!<4^ciL8VAp&z?v0kM&r?OD1wP7S3xh-bLz|8i~C5+JzMLqD#XQ15H zn7B|Li?)<7HHn%9>bspkCkxk_+^vi%q{>_9#GVX!s}0Y0;!_e?mLs#Jx(L~Md#uSv z-g+e}w{~FM8JL^>^+4FUqsm3TRkP<7^H)MzJxIp-G4!iO-@y!DBr~(ia}febY768l zK(WRRLfX4=F_aqffLF6&ts-26So}0Z#%I5amaU`Z8 zPO7NjPTvf3Cge-oc7;r$h?_VwKgiX&l)o(Chqd1yESZ9Jhgc}^^6)y@gufL zV#<16wHbrmAjzrZuEuh5V>fmx9TzfWdS zQL>w%o9GsV0a^PNa?yy911}Y#jBWc{{GE7fUgb7o2OMGIz>-BP^J3WZ3Y`?4w=5}1 zUwf0}eQ`mKOdMSyCY4LSTsLNw$6|W_35#lOkP{@k^pyOLI1ly69^y0Wuq-Qk0-|+Z zP#CWFn_r(?qk_ZyA+)kH|}8#gCR( zbgkY+PxQo(Z81%q!HU&Y)YaF2GA$7FRxRARZ9SzcTb1W*9h*&WNHL5i^J-q==-ub@1NZ6mhe31m#Zr7uxKO#()reD7n7!0qj8c_kw zH4d@(GduY0RbU8M9(w1(zL;?lv^D|wLB^T-yN?ux1=S`kYQav@(lNR}Su%=>erR{2 zyIr4}y>IzebRou$4M3`RRB}u@7MIyG92{Y11-#MvBb0|BA8VPh_k_Zy-?YWA}U=s8S|>B zwB%EEBcGtPI}>??2#BcN-Yr_Cd6Gu{_nmNzIF6#9macYQ1w(pjL<(Gh(gA)vAj#!o zMXBK88^#_z6x5TBLY-J;FTnC8b!)rGU;aAc8~wJ>sj%^g;G8u%TSHAnAUi)Z)0wm= zzKo-We({DbB04|mWC6@q7>YuPN}M2{?0BD3){KDAMcQSxXMWI)dNz@Mw)Tpm?QK>+ ze0Ot~g+p4S;f4d(TvJbr^P(b!hZ2r^A0W4ES6(VHpCFx$U_nQAmZl(RXy}KLbO=<| zH`fl@t}AC1BQ(M%QP)(%m3)Qd-)V=x!2Z5u)N{rIjdgn7j&)1CFTd)y))tBVqKouo z3#|z^N=*wwO(U)5tI?Wk3kn|#D)JhN(q!?YyF!~dwI%uC%pKB{$rrebu}2KwDzTMh z=GMck$S&MA(xybUS>QLC#~?e0{{n<;KptXNfu#6ZR_m^xH7J?F+K~z*bkCp*GOIy0 zG*-VMJK#++!|T)0i#&oeW{)d`_bT&6aVsm=mL<-8G&(xI6BeOpR<2aJENg6Rzo8oI zh+&8LiRTf)avH8``2C4m_|>EW!rdYR9wV)8y>|x62x!YJjJUiqM8R*a2|qPW9kE;x z`>cdW4HFyRtnqWR>uN$3tbb%$M;frC`@o|lBJdrDA<#tqbTh~O`c-v<9phr?$;2%S zV7_;dWwl;D$0DbNkp5*X{WIA@uiHSPu&PrV@~Z?eGKtxQqh3(#0anzftN15T`4ctg zFhbCOp&jFu55~7VJQp>IULlK0EqA2Qx;dQ5=)ve4zVcU4c! zOlbsdv9_25(Qlg&t9B-MPquprc=6^ z4%5B&_~>%0za28~|JRU#te;t5=ALMjIqA+$<5LKX645uL!SkQL?>~NoC-!_uN^ssP z9^VX*1k6;(;Qacx`jF0nzGz=+x}XGO7JUD-EGUm_;VDOYt<_ZnxGe8?s_E$HP!D}I zvy@_bff*BRh?!7CAiH~T;B-1uk(iXk+TGsXKD4`AM1YU~XJFuYS67$K&H0}6CFt<- z0J=S@WRod&kJBs_px8hd*9&s`tpHh9{naoA=6CbQm)TM(E78?tKtHTw`Ak|>-evy5 zM$$)!!eC0D5jAvrTGd-sT8d#h^y_^=ycdpQVolN#8W`hC}|R zRFzLIb1r$`2tuhme8M50Fog?#EN@rBuQ(JBw?@6k z(8ENt)#S+?wSgao;1#9U>k021^1zEd*bP4z#R37aY2}K^<8i`}y#2*F!BTT6eBFB4 z6n2Ha4{boI-LwM9b|+#s>J#|5Z&%UkY_C|J{`@&IIUaO}L6onpkfXxoyc>TM;(sf} z<$0B3Esu}cfq=pH9pZ zZ>~APT6BNfYqRkt@pnAhz|YJ#zQN;kjkm(K7?3 zd455=S}dN$QGHP=v4!%?Lc-)l{`DrJQbq>z#_3}FA9*}k(T1X=Vxk{Y2r;2JNtW{# zBz(3R6-;fBK*>{4qCgtcNtKzJOGpawNs5Zvo0oLMk0Fb7aXs*1*guAh${>G{2V=Tlm&`JU+~+Q{ER2Z|vLTub zmIQPQPI-xj)2IUz->20W6JK%jcAWNku`x5H?~iH9;exle`9yNKVm=%(9-(UYjWChx z!eKJVx)kU$tGs}=GUDcr6fk4vzdXx9Hyyl0d+4D)*>4VOZSj80rwn9j#i&jZpQoSu5Y6xlRaKvp!t%v2HhUqGpE#LQI~sSC=c^1V{utOQPB$| z&wE{Y7b#V%jnYJBf7AHxha4$wl6T(*wZ@;yvcC%B^ zcv317Mt!FZ^Vjq)4o$9S=HV&mkR1Muq11Z{#^}0_U)-1{-wlUAU(OzfF7cN5+x&5} z%))dhN)cBlsU8r;2?pD=ZyGLGL^Jk*;s= z7=w$HIO$SExYRk=5?%*Ap#m}xV!Q*W<#u&VQ?RhHVoO7q)_!rcR0k0!$=TenE=vp> zlbw-;1Ez<<_cxx%)9HVmsefIzGg!^!yuiIzZH*C|4)U3?Wcc zSE+28epxM)eOrxIn3LGQ3j3+AT(2Cqc&N{WQ$9`fWU^?ckGBA+qm!NslJ)JT#N}bK zlWg;=QK@o$$!QhLa`)4O+#^8MGW0Q$5zYjahy4P+c(3;ceEA^@VB78ZhR1q0Qdhgxk31q;MKc| z``zJFJBY|luGA6zp4P?nbJS}H*^RaA0gZ|xDu9!!vyvSg}1T8 zGR(3DHR#DX^5gelxT|5RtEtnL^?(!T1|DalpqCL}*egF@^9Nybj?#k|R^?$LiRBJ1 zEH`8!VRfDHJE`%WyDPeNC$!=>K&8FK#BbO^m7K2o&-@l%+@3`Eit^2--~k@Vb1bsc zVTIG-u+!9w?&@*0pq<*@91>f})?%e4ud(xaYc$)ZgYPUq`j^LYWjSe^!@u%xAusaY zyN{>g{ZsM(;|C?~LpvirhhSs!NI{gQf4UHtoGwV2K=flplf&*xTGOfm5a?;@>2cBk z4qod(4LzGiI&h}}RAvoI^!CBQ1#Sqd%i!Q3keY-6tsQ2Z{rLe*FJ=l5uZ>rLzaz`Q zue!6|ZbQ};bU+c119vKG1(=d`%*r#tz=AB#7tojFrr01%hn-84bres}ee^Z$pSalA zrtwgL4NcHLt*(M2%Gn3SP~EP#H`QIX{8bckZ1E-t*#7eo>*C8V*2{IwGX8+vi|aVJ zCC^|;2jPHWkV=1C;PI~&PNluM}t(|CS- z+|Y+wtYbvGf2~ZJet8a=^lusoJu$Qq51+zg+Bf3vCSv?3r$pNJIGZ zMFry6&*~_mgv8_Ywp&mz0%vmkan>s}=!XWaq(u-x+^|}RUgyDbBjcVaX7cX-4qec# zPKf`JSF2C@cQ-eb`pDNR#!J^~eM$fzT!~9_}pBHFEr{K){oBq1g^u<{Iv}WBL)%s1puf(m&mF zrLOVM%Ob+qpEc~DS<_wX6Kt80^gW0G|Kz8Zg%A&#`I?xkJ)C(IGSTo(g2mo>aYV{; zCluZn6a%dMVQmUfU%;;VYD`=nj%4=KEu72oQGS>pYHsN`%G$qQ`!2;Gx&~qwv`(ke zHzZ>MJ7UWn`V>BP3UBl}92zGdviHUu^4y>QXcjdS>RhE*5vSyjmAeXQ*)*|yzsxcp zvOgX&`Ey#QqCl~#G0TaR{18+kAQsM>ECN7#Z*W>%9-{^98j25VM#=!-vlD95e0EE` zZimS*$wXzSFozDJrEzo{eQq(Jv{&lYJ)@Db=`#(dpniq(*f#J+xWW<3VnuX4aq}n7 zBEQ$|;yIaX8Zx!B|YHnCmOr~f?avjn#W{^u>8 zEtw4TuPFz<c9QZe{7iYsX?dWz|2lgU=~Y2M>;>9eB6SWM4wvd z&%XAJn}RmKwxEfP)PDOj_L^Z;U@}jHus!{35^efZ7Y$vI%qEP&ds62$zw-!+ za3HDc_08a$T7N}ovqR%D=P(BVz%!J7zFwCLCguN%2tVJQ_v@VHrZ}C}AlU4hm@Mom zDfu+}4%Z*DLsuyNXhQ1{SUEiK=+J@)*ZlL6mRibcb#0K%_&>CoTFAz&#bR<6ZMbaj zkpBM87*xh+kXX;hvDhkyDCjon&{KZ9bv1EPXzo#@IKqV45j~yK>}CsD7J)eA(_--I z@U{Y*7e&J+8F@PS?K}N73Dlh(^YteGK*zIFAh#oxL3=QT{qiwHvr*$Hf8KMV}=O0RRiYg@EMSedPlzg3*Ps)9bAOK%Xxp0k1>_%yY@bp{5qIBMH#BJC^K zuT0St>z_PSN#c-wI~!O+$F<-MYaO}cjFDdA__Xh;2y(<#qh4$4oKZ+cl~>y^W17uA zL!A?zoE|XpE0Bm>_velt5vD%=uktluJs~2B%RefLp`|#=TeC7_5E*k?d=;aV;UB)SqbT@chUNo=H9>0Yh*DB(X?!W z6}$!hw~2W$o^%OHjd{u+4oS$}R<1|{%BcE;_W5P^tT(ApjE^p`Et_!I*D=5mhoRxNKO4d1ryG=fuk!Zn8 z14^!g?=N@gps>-xX_+i*ETPo%zwhN;}- zc7uB^Xfv}KH->OX9;`lbVb;v2PO`>{S-!iyEzC0>@L&#LiNnKvvab?QMbZPS^d!aI zFzJ61H98!HV&r&nzHJ%CosyKo;m~W{ZSr-|+;`h8+Y3V*`;YUfC5`9~ zJ8onxI2|;F{r%adB7QnL+HB-$BsvW#82k8BOY7!2bY9WR7k!9U5IxhJ9ND=)XD_Zj z)@?8LpO<)Ek_p@ewSGw{1r6QNEnchtGzh)`u8Cm9Y?yUq+(bZ@M*zdI`v&cBEsINk z{Z5?V#PC6|)XD6yC$wXWnCSNiRB5HX*y8~-vg&pK@lQ3Ly5azVXm2<9lU`P=gd^#S zR%Pc_R@t14@l3e7bt(YIV)bh%(k8`*_%`oEkw!#BD=bNUO7fBfx8 z6dGX@etr5bD+Th}mU(%`>iG|+uq>+!%36ib%3XB79!4sd#4%1hD6kckz4xm+I3Aa{ z3t?8B*9+2+U8Qjo`v%r*n10j;P3=kDWJZ1~sYLi3y-Z)1Qz468f?H$$@y;8N zqff*lG9F|y_lU9;?5k7LA%B1QV>>!Jq=O(pZ`U&W-M?H`I<2Zy0$UQ)LxG3MA>Sq; z@5}0#Im6N;j4K7pOfi6>3Fw8`(d;VKb&msRHT_#RfYbekyo-yAFLSr@d{AZoQ%)nHUnnu_lMM2=Z-u=gfBL`s z88PZ$0J|guxANi>MgxcgJM*su_o5Rn``g#oPm%4L-^vv*K9gn4WS{WRtFv4AiCG`* zx{wK>dlIPZhi76+u@XYUm3FYe8eNhm{xj?CT%AD%bDL4ve1jS;!r;3@bb#(DwAeuACo+!ZH6a@jgR|w!1cM> zn@va;@hL@ri{K_rSV~jOm1hXvPuuevSJN+~Uj&h_N6}T8{P?O-W$XHf{%^eVhg##C zhUI59Re_TZb^XSVBjUO47A1qj$gg@;BzMQ*`?CK~4}IADtvDMvO~Zi=+eR=kkcN_G zd@$1ZH$apd@gxoL=DRD zO5F7(T3EfZ$4?Z;O82bNS&eUxNM0gSfrl4u6jHH2p;LE#qTn+%d5qd-Qe;hd%{trc z+`LanDIxb<)HJ!$TNn1>RhF%F1GY)YdR@-@*sh$39mQTA$5boPg;1C6340FmUpBs zV~^NuF{}YOpNTJEwH01BgAyh4K=9BmtQ96j9aW(C_M<2@4K;Ps>h2%KsL)N$ z79cv8*Z8RHvK(2{W5it)K-U&Y&K!V}Vd6617hS`gW%x{n$GBQ1*WwqqCs_P4(E}W@ zp?Ino`^n|eisR$|+jlVjW@6b&Hm7X)o2reEJLE4Xt;@3Tkpzx)B~|-%X=ywA*o&Ig zs%A7)#T;z2Yk71hnf2x^we++~{Wk*Ye)$i)*vJ3VYnsZw>_{%0t6lw0H>Z#gIOxQ` z46E-nh<{f^q~qLQY2G=Ax#|qG$w0w2;o+sr2=6~ZQ`gZ(9b_tm2x#HP?~Vu@kP@&6 z`@6m&FsGx7F&8q%f|YDmiQ#;6011p*B;2-bD1w2XjihXB>{`g-Tx=|XnYkoDEvR(T z)Z2_z-Z$7X^8pb{jOb{;_#MSWT}uP5I<=IZ$0M8V`i+rAHBAc%Y6^uNq4Su|&PPeN z6K<&)D~mvnPH}UNAMp`0kx0;WVqz)sw~;eRw|p`Sc~r_C`9Ph8yGjFNi{{jt`q;+L z?k;97p1|ny!3TIn_Oe$mMIL&<-xYuPizS*=Hq%uQuRrL{M&_k+ZRF?zdiI6 za+I$RBam40dUEJNw!$3{>$vPGW{J&z-xCwj>q#%hftq?&n##8gHr4Ohk zyeBrLa_z~W-MxeHBUd+}7S);vnZyiI-0w|?!^c>~zuVHF$QHOiE*AE2$+F0o!1%99 z;uq<-RgJ$2|4UU#iboU0$WY_4Ok$R~C2+Qk%&F*p2B{1QVx0(Djd*{jv!sqTw^2Ze zm^Z>Fj$?m=*Xb1bERQQlPujFZqe>u@)e(h!%=MUgZ2Y9BM)C7EY?czrCzaQYZ&#}q z%YuSH1Htj;uHq^VCbHChkO8hkGq$Ti4T26YcECC}+;yExIhD^h6n07f3!dTzudH-l zqCIA627z+(VA~uau6Z#{gC5qlwI@m+{M!v}?pMI-IaK6|aV)TNV~x{P3{@5kKC|hY z!*4+_!D6WsW~a)A_u`qVU)=NDxhdx|{UKS%fJmWog z(udl@6F6=blzU}d@YD7VYRj8lu5$;^YmcRYH0SdcJ)be$AJ1vkCTyeQP1K?K2GRPC z|A#gV=;%z~y3%#@Oq%w_ohMlp>R@diBssTq=2Ds3YxEIVpS`lP^ZJCNz7>IYJV+lo zKgFHw>kG6D(?GEtEi%;LAt54SdlGFI!%qGKGzg}yt~_6k*Z^Z2#2HuO0lKg%;1rf- zDNR{_EWPWvbu=Ws4=qThMl!j&y zw)*YkfAGH^%9;`0OLnFAk^}F*M5aNSNq$JTrlloYzq6E50c2OfUY0j&PtU=!v~b0; z*|N4&uUp3R-1M>&cFjP+61TP8@dG*RuU+e@Ox@{}*5zg!5)R;zYDDH!Hn_RjuE%-e z1FHp#&DSB=gmj~;32vgGnw=b)An{43h3zHn~yZw4y-&-&g+?TPr>~~*# zz{g~$7u{VR35+M?qo@mBeL1ocLkF^!9Fnb6X-l*XL@C zx?|^ZuWextYd zt)SxDwfCI-AqRI$q{{=Px2R7Y5|=L?F6i5Cwz_dAxF!b+9Kxyj_I{YP3vP#RNFeL@ z6pjf)M!_TN$kwfvW6)am{3La~wZ&Ey741v`_Qf++ccin$u)Lcp zm6cJB*Z_DaY1qq(WH6V2jML{2&HX78pPuF~Zj1C-qbHkt!os=|7i#iOx9b}b_fvFl zZ~ro^dY+;iWX`_<2?D;g_BYk7Hz`;KvXEO!K<*0xkMKi^5U^iF;pnV-To4_59wnM_ zc8Se(B;ViYNo?mEnt0Y`;;IgipBCP4zYKei;8((a`;v za|PcsBGgh{(R~bE;U&`pGDaYYjKm1ZJR!X;*#E9T#?f$RIhSG^aem;4%DNs{+^gr= zEhItUbIY`Qha62Ll>&X{u}(tnK#na*$%d6j|MBtL5GuvnVzt1Hq8cj9R8Vei077$Eke^-8{@r)8H zLGs50*}@PUcRvC^Y9h!~mTo>FX(uElXsL_GC;485y%gpk9GlLP*vGj(vrJGr5!G52t#~%_99XCRCIo+L{0AdF^CBBuC}dbJ(IB*;!|Y zfNyl_Y>&TM9*x7o7@~X?vR?X;XzeZ4hBjUECR};BXVasP>i_f*D6_hhQN15H%#d*g zUEi2Kuc4BClT_8Mk{`{FizPP)`SJOinb|vk5u^$!y}sAatqP{5R3l{OvV%p2hKJ`7 z_V)HRH#dLpTG+}rgh;6J@bbO~-4Ie3Sh_fR0)sP1NB(_zSvP10Iwo-m3Cjl#&-L#g z2%|FSzk)d+8q!Tbjfgh(j0vHe;z>Q_ZdpDgtt8TYf+GI;QzNyIwx`b!{|x=&Hk2qB zPT?<{oltVRX;EWHZcjdD(&|mNw_!NbUb}sqs z#hw{2`72J$%89JbV_>QKLH7--vQ!x*Q2c2>LQwxjb^Y6Kft%MA{wW z1pR{$CK#&9y6Lg{2f6&_w+B4~{mdnme8jsx8PTM+JwnbRn~#)Xx}6yP77K0+F1QgH zD2f-v0v4ssu;<6MiF|$RL5Ipvru=C$mGf^pZNw@mwIzDplNV4r)KBe4U+oxVf@GXG zBm~=*47dt|Y=pyIVy3%D(i8>Z*=?J;&?s$fCM|Id4(PCa`7g7BtsfC1?bD za0O!wz?L913Yz-HrV1FLsjgU@CE7IyX3XVUKG6rQa2|QStE@X-XuT`om8=Q00HYDQRqip38~d_Czo%Kp z4NY0_#+H(V;Je-J=fR5C5$$#4ShI@=8!eC?_-JZd6!I_AZ+Xa&HQdv`9-j%HQ7=k_ zCbG=^OIlK`vbxc*DII%vEsM!acvy3|tTu0TCR~)E4u3=lVFtCulNxpE#<>BpittVR z#IYN)^~!e2&>C7RX(4uu><4z?x(CiYTm0>a+^Sx~BZz62`@s~nbc1ML;y5boLp7Tu ziyUnmcLVbN4}m&G`n-XS8jjXS*-m5elgJ73q*iJZWv@mqU1cd{T%o7_2WA;%)+5i7 zP2%Un?_oDYMnniOa@O&Q{JHFLAHQg->v+f(Bi(EF0-@gMO`SMdPQPSu%?>cCcNMS<9v|oDgmc`qK9fSe6X{F9kvq4_ll{D)VtW^d3Die z7TUPyFOG57A}c(=AqxV`ZW(thJ@zjL^Hp+pk&?M=pWrd+KJS0`f9husH6`EQkJ9w` z{I~+T`@gEkKC&dRR0+O*gr<8g)baJK@??2TE49~eGN(KxgQ|IG>y=Re{z=0z)J?KF zYwuBsB(|8qbggx249*a&Ip|{pl1?)}m;L?wtbz9l>WMnq9mPA-Hg2obIo;i(>Kq3* zlo(w@j0^_XL&RFDzR3hCPF)c?>cN0lz!fbh|j!lFHOBm6Y(7>LM@w#e%R(PS<36M!TMKkWp1vo9*$TLPJ8b7s}OpB<;J7Y43&tpxd?Qx6=EU#J5Xw@8` z96!(CvL#Q~i+`Jxi0s_)_g@6OR7NKM9bVH(Araxc&$Y1Pm)beIX zs;FaJ5NV8XUPmOVTtIh@vm(D}59(<>)?I9Kq7#s%inv|Pv;jL^_-$LBP zg7=%n)q1%%@dGYnOCb%+#^uQ-p91QBLv}qVN!Sfh*NKPp2+aI9tCr%ga|ienO3n^M zx#y*y15~_`-HJ|2z;2K=*?pwhh7NIOtcXXUVT;|#fi5SkSz~iPN;2?obLFdo%vV~8 zO{V)w)ZuP>2&=M$+Ds-&OhYNUTtHq2*^Yk|$%*JPBTTUzd4BK|mD=*&m0~V-U00E6 zRuK3WjO@})@%}d35!aJye^1d9Eza9_tn+q@xa^=H3e&aDYRYa_Hf;qrIq-z%6DMH2 za?RVMEjO&c%kBt${Krw7FMC^4!P=szs98T7S+?)3Zm z$L_!R{$pV?kGIu+%CW-tk88dNt=DKwz+W!*hoW*y#3mZm-Uoek#&_{Y?H}G~xJxE7 zB~;D-;VNT_(Y7scaREFPb#40F^NQ-~$(+ivvNZ2HQO0+|y>C3Eh6Q1axw*M&9ozx} zR!C8Q&Sz$3P$P`X7?q_2OH-U*`v&1LwOz2$>e1FOYo>a_U0i1Qu6NQ66dNKp)?#sF zuMw)~jKY`xXhg-MVm&vdG-~x>ilt96WbD~*bp@gfkK>pBxyF5%P1m!OxsB|VKj+`Y zJlB5Jolzyok&C)w_Cx)fOJr7!P)1~L_4vrA-BRjZ*IYGA=oD-78iX9#edE?VJ~6&S zC0C(8uQX<+cPC2lgtc%8#|7H4H}AZr1>@L}Ic#$OwDqZ`HL+~xMj+s?t%VUHSjtw; zlj}4=R(|4d>K42WEl=Vc@jU!stJU|-YQ5yD@sO4WRvFo=@#}t{dzat-^-UN_XZp>7 zM4Lk~CEEv4uOKwEy4xW!?fOgfeR(;J$A+tnpPM6G@yu6k!S(>OA)^Woe5!}%0Lmn&L=ATRHWLkRL zLSw`&-;k1kA?n3l>{WpGti>mfj^Ii|3*8qL&nAL|yj*4vG4nMVMc&k;j4G?_2VP zKX;1!$^SZ5VpeoW$}!Z3-S0lJJ((PRa?y(%etm2=bKDc}f8}|U>ha>Lw&Zsscc`mU zvyRRAIr-HU4I$l!=*P+S$zFt8JJ9D|y%s~#zF)f>io$KR0#MhW3^5)SdT>{mX(kJjd3$HLyZ0Vzcr7etr*> z00n_37jT4`K7SP2n?=s>tG$DyvpF$E{Yb$hHY^4HM;jkV34Fhrg@0yAVv>yF2-G%2 zjOwdWi;(;d9^_eB$yD8a1(*MBoz=tB_wOJtzqF(EoD>vA}p6_i(k}*KyA`a{fMs`bO!c{G3CC-1Ur5 zyP`8Ow?dE+%M4Sblpdp5Si)Jxrmd~5Qf*b$7tdWgUu_my2?=BqQ`0^8@AjF=$?OAY zbI|_2)moU_c5iQQnIs^l-n}L!4iPsE!$3#>8X-+ip87oXVe5K{-u>Y%K2cnDwe*@dE$czus)c{rBQF$7#yAQUy}NBShd1$T3E$lR7#(?msf58%mhcjU%8wG+NdGJ0 z{+~+LL!CQ8*|KT$TRA%EB|e@t*Wj{Eq%L~ntq3{3|F~HFs-`W|M)}0+g}|da+P0tF zTeL5<%n5d4YP)pDcPH3Nnr|3!O*d?}qevwroGxhJr82V%g!Ugac^6XejJ_C8=&X04Yl?QZOQ1jIKB>UK3U1BW;>E7xI-~swb!~jpFyVVg z&Pi17`l{A?p<_qz^6|i<<^VyYZiiy7_vTMe?bc&7`hEvB!`IHVrb}0L1#kV}>`Axr zJ0)37G}d8D-Po}1`O+p-O98E_IK7i5EmHKAp-s!Cn>lmI+G>i$NRBgZGZBWN!9;hN zYYi=NXdrTMT$tK1gE7_G-Or>CW6@#-)ks_Rh0PuT*0vshrjR0BTmJKA1NBz|eB@v|e}kvx5ftbluB?+1JMQ6f#2Jn+{;EgghBaUkq`{vuA^wlK8lp zKe;Nb{rh53w0N@~$+>p_x7!8JFKoYZ;t_182*}Zs)4g|9@YZ`7J?XY#(TA^ccy&+n zB?k-4`BnWvv#GGpFYD0<^=9amfVVg{P4VR^LzB7R#CUAynH$Fe=f|FC zNtWdMMyf1$g|iNCyho@`(?)$Dx3Q((W+(M{oUpGBHIMSu*SM$lB3?on^J>__Sq!00 zIq9ajiL|G>*KwZDtqq>`4)cX}i?_A6>{`UT-`7}$HX%YPpPD%!PC`*9r+rUL z-MbcwvPLDd?ijwExQ=pz>{#MGm}`XFcXxy_yd_BAKeo$vJ?q6)u19+A#89{PJp2=# zQb$L!tCQ64Hyw~Sgd+Qm)`{n*I$Zq3Hu8!8kFmFmin{IkhAlukrAu16JES|MQ@Xob z>5%S5Lb_pSkRH0byFr>EpFf`0{aojJKVRN2Gq_j_VP=kF@BORYwi~JX_vlAQkjwdC zyVAB0@DY~6um36bvtMa|B-=aEZjvS0n~P0GWMbt{@eZ2tOKsDn>MqrZ&TekRyJtr} zdu}%z{*5F3&)Ksg+PI^BY1bW2*MW|q3+#1fR4Jfd-?!bEXtKyoEJF2(L=p(8vqzQ} z=FYf&$mctermSjcP?xEwt5ad1rNtOcNlSw#3^OrK0yv(gnwl@rjC?WDaKIiLG_jk@ z%df!L;o;@gk}R%A-+1uR(%;`-*C-3o@nGsx@@>yFcA~UJP5F?=nb+#uA`-)fs#$_x zd0&|smG5E#U`+i3L>P-in9Z4$5U^0d8pylmA~=CTpw%8n~f9CO|(msFZ?xQGiV7)v8>DyCvP3=l%iCKj1=5ou`5-<8wX@*&}pnbn@6Yqv^ zXE6d2ZqzqMO@{B=YeRYQ7;XM!QRtv~5=0ZmbS$vEzVm9uHAhDv2|5&Nr zr>gfQd1xZmyG#YkDmlO5p;*NoXpsg`&V1GV@nl>R_eILN4w^wwQ8N=jD|L^Kg6+aBAFcZ zz-0rAHwi_Mqey+%xz7a%E!6Qw2g+QXI+<3#TZoGba#O9M(wUStmvqs72|R5`ai`&$ z2;br9X~~OHy<=^~sX4vI!2RCFV_SY&e2nKTt58z$+|}>-r}vlDJ&s2HBVw}A$hk*+j%28g8V ztBo8n8-g^&CRvRApwjwAXFU9FfKMC>lAfe4b-!t&u~Vz^Lu`^6zyIU7<3@K}zDUgY z;g12D!HoY8py3g+)^FK;`tZ{HRFn6c)T{@moBL)h{}GMtIUeKc=@8bV4;_PC|Frq8 zti*VXm=^Q{5yqiEF%h#BF#c@9_LGN`^bwawMk3+)xVT_aohgh0ZOI0gx3{;4l~w5! z85|!gYwf`Uun24aVs{kFH6So{!wI84mv|6M*G*rPuudSlX$IRuvLo+3*`wh6*P@3< z!8h!iBq<2=Z)i*hES^ce(s!0;{exS)GccJFgZVzIsT%gdmF?q+$#%VleT`Sj>J`|w zX2S%++QBr~ zAH;JYp90`E;0x-xk1b|O_$m@vE%|C$>y`tav22>bE*QU)<@%8RZibm+rI{(c6;54uRnd4_c-V z5AQkf-ct{LkzSE$^jsLAfbZ;gI1`(tku@~-s7qIimNhAsXue~$5U2oIYMydCo$f@; zD(kJh{3<&UDAk#T85wp_M}a^;Kio~QgnYG68U6T}^jhbBwS|K%{NbJ>`hf(5cy4#y z;%@A7N>1i`Vkn`&_yVD!D51sdZ>=`@EfKX^iN+!RtbYqTNhrtbfU)>}spRzI4bWA4 zTECAVvAw6&aJZANCM_%>BAbp-M#w?7WJX2D&*Cm2n5Jg78R_r!+2H4F-68oiP$NLbM0HbZJm0Z0u1PKL$(* zozwvf`zFJ|tq(}JK@fVU$V*cDgJf%Xo@Q6|s@&MqqmWC@ZcdW#Q@;>TblR;Kw$x(U zz0ez>VJQM1@RG`YD=qAtpx-Q>9+Z8nechUdt`2kw2HS!(frD%tR5Wh#j}Mfoqzf`+ zL-&UmE1TSRhl;lM^}1w_(7bL^Dd%(4S1&O**WxE-EbaHglP9UKnVoBCG?gU0w+-z8 z2P*f*iFKIi%HYuaX=kG?k+L{ERNUWsb{KML2YmsvnHMQk^tgWYwRwseMICxKU=)7h zy?{6^edZs?_~y8`pvSsXmwuOdkB;zdQ?Bus1CPxCDtg~__cZ&no>naTvwwx|{WDmA zpn728^<(nD z!2uH^Ju)(~unDBmj92#j0raNH>FKq7-i=$u;+sK}xcK-Y60D6v^f;~~7o!41i87cM zxVZ523A!=ws6RuhdJwcrz@l?spPCY+gQ7yU&$~m>7iiTY{y@L&WsevW{+2sYwsA&H z$gRd4iDs^hZ%Pg+RkTqx$DQ7)kM*)itTq$l541SfaD-GpsiupuLCVOoUR-(heKf`_ zGpiN@ssBB*(PD~Hm>S1V-|Frr!@LcDHW2R?D(x~LOG1r))}lH7+L&{y5NN2qd^2BK z+4K3QB`p>^{mDTW+@YiQb|*a@{n{OX1ghOiOdD4rZG&2>&bC2Z2MXKUAo2k}=l7+; zG^1Y$3yKx*#4T@|6=;g|9>~&3JyYpBE0HNV%*is{QC9NP zRCyKQJ#0`{g6pfs!Ty}bT|@*hjqqyY?}6bO?Q#RH1=)u9O1j`57lUf7?=E*WLt8|? z@9n)wu1{!4HZU$M6$FE89|{$qR&BrpT+$D}0HD z5e3yvk^h*~CG_|dj@X4H@$=7^ua2i)@DfYWH6{(l0tnpo#np-Uu>`P=74Z8Vx$5>! z2t18K>09|fmDBVKZ|uWFyPc3J=|QOC!Q=(I*_5UV=sS1A5lZ@>GZz|;Jqq(c#!!Gh3vs#{?XX=u}=qa?D6jmBAz)t*9A0$`p6Gz$4qUa*;etJ(dY`Vmy_}#e3;m4p_?GjbOU-ACm zLjKQ#ktaHun1!!SUqFoawZ2)0eT{s|)z@mFGfom@S@>}BM;!}$d#3atU3K-(x4bdZ zL7;GbQxg*r)*>UEZt^}#O3JHpo#rEcoYhP6IMM5q<#0f+fzN683dkMkae{_{nI0Qc zKv4zq1#kg=@+}FnH~d!Y_2-8NqZ+Mn!s@LkoWYTx5D7A8vt^3gPI!h=aKKmQl7}H7 zgp@WTrK1!%>IAs0SZ?~Vy{`_9#%!#lFBLbHlS9}i?St#&02VD!Y(G^#u`|ehzp8h) zhfAw^qW;sT_}@<6X!B2BXxO9b`cuiDs%&2x+_s4Z|Eq5s{1ug#Yoa3wyLPmLbV7@(2df8LAmZWc|8rn}b1Mr28Rg1S z8!@?d$S388ug6Ay6BdrBmco-PM+f_@Hu$IZ?_`@|Rj!B7UX0(bA)JW&xRpj1K=Vpy z4C@d5h{zIgNowiGyloqoR7zu+Xo& zjv^`&Jyv7;iU%2OkvI~@grE1l> zzW0LeyO#0j{kxJ{KoGNFe(42KegpACexpyumyw_e$jhqNA=BmmN z6*+$8P-=I>g@~WffGK=;?*mVRannRSnBIj9kI`AbI$riIvj5pXBt!gkOjivxIbgeLb-FXMW>)Xy}IyhcrWcU(S@n%g}uD z^yKp+GIBsE#a^DyK~f)}>utCZh`&4=~oP9LfXjkq2?_*k(7o_sv5pJmOHifuZ`7u_o5V80; zq?E;Qkgzh|g|4|V>MK6Y(%eH5C#Op`7!qLq=_}sP7lZwOS0!x0M!q#w!#byP=B?%3 z6=a%!yP%a2;> z+By$}u}!;HJh`_eeSV7Aa1$I3c{k#`&hLN`3S=4rz^(*&rOH`Q-&(6Z?7X9`I;trt z%6=wK1M*26GVxjW3P@z8Nf3+IPjy2X`yZ@JPLR-T;gx-nm;9S!9zqMUU0ljB z22;<(GfHGF%==`l3082GNa(gbA3+~n$qD(wno!nr-J{O2%0G0QIvbFihKj7)>Z@q( zoYKbC3#suj8S1&*z;I+QXht)h{xn>HiP;2d9>~B3wNY)=KQooCmdiqD9+Y@LhDyeN z2F$?7zs&<0#=DC=c-B&rChNPdlXi5QzP9&SCi)J#hBwYU+;^#l?AwR|BT)9xO%Vrw z#8FmyFkzc@8_c0Cd|0LC@rmHZrJuLDc*QMxHg{<5Tb(XUK^V&1yf zsJj1#_vOstCVMUb^LI?M9Td>86vEux>Nm(Ebn>~p%0qIg?c$q4z5!=?{ewE>WkSe|w!@41vD9kfX!MaH1pLKQ3N4Q#J!mKTWw3LZ@m zm*dV4KEd?JYF^K4tE$omrpb-p=ENDa9EqAPL0)zSDE6$?pJ_ia^s7hX#JPLg>yPIV z?+kta{yJ^Gp*F|=d^<6L1R38(Y-xCq0i+Hbvf*Kd!TLssF@&9?op#mZqU1M`@PE@a zqOT~i;o)vHMDHv7uIldkH%4F!P?yz~60d~5ZEx-f$ipCeM~q6dj;=o@)X-LF^W}gP?EQY8 zx0%Oag*OyXFY3RA&%R;^_85<20YAh&Bbb_Eq3v%f+`Igpf46i+MI7BHM>HSq+qI&@ zr$1eS8h+_mEU42x?`G8;bD=g`Nj@+|4f)>EJ5=ZiJw-^HVJOiTWj$h}WqIX6auNc* zMDLOvMtjklgjY8rcI2JPE{QIaq1kP9oFA+lP{vp$VrBZg`UGqtY4;>pNzekfI-xca zwICi3znwn_)GQwDZZ5zIHI-Md@^iG~07SL7zcbaE@%vFbj4Zulr>?raT(%gN13VxG z06E3yg9W+a58&Vq6(hcBFRmFLC|AvA4eZMN^g@+O5p|FXgd^<=y? z@RUOd>mb@Zi$EaYAuTE9!+vuJ#i7VT|GDNvL@=M&0d^3SDz+`o>y2jzo| zaWLrz+Ww>uI@kwgQDUxOnUwt*zs*4N*6OHga8JuW$IkG?X>0q8fx};+%)7p6x&84( z!}9Ne``1JCv7iL8d7V7fd&=$T1W9NiNnbrw0M3avQ%W)Z^Lt(eIRGALOA-;t;(*L# zb{kY#xHcm+N5{ZjOlK#jx$U8$14zHglG5p1m2k?L97D7;oS~s%6R_d~`v}m!dAPY@ zo4{%yAt4!H(qKzd$UBi^4p4nM1T{@K{^jMzy|Ep(!nf@^$$SLucgdW7CUCB;DyR zqR&KK<(#=V_O>?;h8m^3z*jX$%Xs?!EUBm*hhwd%>@VM}L7INiWH~FAzcoFTE1X$? z;@9-S=5GAHkxbS9F1^Fs3^J%EauSSHd3iee(`GBv`BQkl?}PXs`c+-&pv)4Y}>G`2?c}WvE+)AOMKK@+(TyIE9g;rxT2l{Yjrk z4=N}_soGZ>9sZHKM#y8ftri-U8Sqr$i<_+H$H8KI0tN3U$XEZKkH>a9sN*&Z9Ftz| zq7_8qiShc|&Km@3jPw$OMO87o|3XrqulwhLU~aSGMX5Ac6+}Pakim<8Zihqa**)3gVl=q z4Ks=+1bPjC$iz3jD3`-L&UL}debB(bMQRsGWN~++vfx!uB~NO}Uvn`lrbx3ANb@I> zDBxz#`)m~+@4Gwl4pM>LkvG9!@l*Bk}Xv66I z&LGi{b;u9 zpZ2bl=>KAH|7oyZN+cN6%TL9gHXNp)l#+xrV~m5Ys($u$UYWX1h_$h{)(C)BnEfow z&8s>k@ltTowAIz$_k{xO=O1Ja6(BX`7Q;HZsAwa7-QW%YT07>6h@FQ z+2&6z_<_IeaRHh;Uvm4o+MjBHbXJ(XYh)gyTA6d|)GJ|k7gC62J;%1HbHkbSS2DIN zyJZ+diwpN0jw|YzLwJV@hMml|b%8pkm+aCjz+I0XV{_^9xsFVcg=^Hy$tb&qi^~1; z2nC88RgBC^J5l*=$0IOd)mMB51e5TM@|nqkPsfAchw(v)=lM~La+NdTxEF+Jk%+J6 z+rvE($;Fl0x=s_U?S{<|ZQO!{*X27jA}%DgE$)6gYSjMinEP>0aI1kXL;G94=5ImK z%*PA&*Cc00u!a83KPUQ~&3&bsSLUY?6N)$a1-l(5f-?1}w>&eTB0N69*jgZ60ZrnX z6G#JfgHOJ5i6<3n$g`+v;rKBttzT%At^=@QY?ooN{9f{Vv>N-BT0B$xA%_|@A&jxA zpeu}=29q+C^>P_^RT#ozZd(Ugq29|!XgM=?9CiNy)Ru1$yi)GSeJ(d(Jbdn8#0~u5 zoO&a7d=w^-IV$X0PYMa7gwLt#p>5%ryiPXdho2tiaao)n*GQ^O1eDtFD`l{5YBqwi zACsJbWr%KOziYn}(R#_V<3LVavOHd8nkQ`s_YH}feO6md#ww}=D)K{qjO@qcDfnOV zcRQTbyDOhhuB27nXx&S(Xq-;1*jBCOKNuj%u0!Q)i@M;EuIg*W=+v4VQ8A#eEB?ZR5-_s>(UAr0_xnOcAdp77k8QuX` z&IN)E7cXF~tJRLmI!P@`sbK_VZ9*Cynf=_*t$!U2NrDLZnSudkjC2_47sfy|ZE$LC zGdtp~e{aw69TAq*7g}em+y1Z~j-ITKEf1s8fpwmz~{*c4I9N3Tg(=h0DH`+p6Z=WY$U49mtqkiLRa- za;LfBPk?L2IS0vIc@9^beO*Z;HG08&`1odi9(3i*v{-j>cb{rZ#c%-EXAhGvWcm0r z9|;kJHwH#EH3@Tdm;yxxZsbYFCB<#S$4I1HvEu6lacBI)Hfqff$zynd{x(0o0OJdh zUi~;;a{6I4D#O$(ky9}tfd9URh`RPRV?G-qwZBmIx6!Stb zh3M~jGLfbHT}(yvSn-Rej(KiB$(U*bA5=*AY_ZPsksJ2MkIjk3IOTUI2(Ms>HulBGI%iNdx2Dj?%EFqva78_9G2@_jDl61UUF^X2}g!qu^b7@fl#&GH2kh}^IL4GmAR&TSV(@J)&$8Y0ht`REv!9;FM%B3HPddY>qnbUV04*&O<8DPcZ7o0x-y32~aB(~qko(HY` z_NylPFRECKsyyNxNj+xs`pJFPH;s8;XA&3^M5uh~Dl6BZ7OkzVle4nKJw2O&xK<#j zionCgMb*{CMKj7kO%3Z;K|z{X=Y!tLlM|l#fBo^yEZMf8;*?hZM`NM8v|F~!_|g6MXo9{ zjyAxXP}-esh$0{%761JCbFMqgzx&C5JIB9wd@~{Ed#ruDR4y9zuqm5;`GD=)!JG*% z)hxZ`_-eCWPgSt3XFt+n_T}Z zXgTEamS2SkGmY1l7M{^os}SkT69lRZh_;Sg!gHy8(+|yy&6HJ-?64#gVpP3d;f-@Q z!s<|g*wM@$<}v=o5u7&ru=;?Q_cR1BCtkl3Nnd_9FsS=--t=kBc&qISw|dnZ9kEN% z4(W#UahKnJD=G84g_gLx!CTbVjcrVkkcua1HxiNxl^`t90PACOpee5C#94v?lzuY_ z0q{2xzJg;|G9OA%ZH?YUHp5F4RF)4h%+Sq$@zzne2Nm8r@l;m6vvopa(|-!uI_(W( ztVcP=iG`G%{+@3}2dbwEJTr^07a>rEeg_dFU$^=SXkVmYV;�!0@pnCR;KSy#rv> zvdGL9cv~;Ht7x|){tLc3_`}cxo8V?!EI=>`imIJ)DFN@aYF)vy;|V@>s?a{B*^=Bm z)@Pd@#DxXh17s3pAK-eX8IqZS-PDbF9mk8WM}16ZA_-Zp99`P}7?vUK)nme1>g2dK zVlf>PPgjrJAOo*c$mm4-gCU@!Fv7(rJP?&nvp2q2INIyixG&xd)A}MYG-Sv^-0o;c z#2Iq^{Mg>vx%!9*U#Wc7mg)0W#uyleh`G8XYGe*CFS z-&5GZ3+fW-O61Wi8<$t5m$~FJ8t3iPk**{}#MAb-f-&gda~#TX6zGCbB|V$@Y;L^o zLziQ~wJAFX?u38U0pJ5?W$xF}2LLFsk^xEUj3#xh?_z

    Wiy4zrC~!4 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�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 z Date: Wed, 16 Nov 2022 09:03:39 +0100 Subject: [PATCH 62/62] update version numbers --- README-CN.md | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README-CN.md b/README-CN.md index 3f10f862c..f347abe3f 100644 --- a/README-CN.md +++ b/README-CN.md @@ -64,7 +64,7 @@ docker run -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ - appwrite/appwrite:1.0.3 + appwrite/appwrite:1.1.0 ``` ### Windows @@ -76,7 +76,7 @@ docker run -it --rm ^ --volume //var/run/docker.sock:/var/run/docker.sock ^ --volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^ --entrypoint="install" ^ - appwrite/appwrite:1.0.3 + appwrite/appwrite:1.1.0 ``` #### PowerShell @@ -86,7 +86,7 @@ docker run -it --rm , --volume /var/run/docker.sock:/var/run/docker.sock , --volume ${pwd}/appwrite:/usr/src/code/appwrite:rw , --entrypoint="install" , - appwrite/appwrite:1.0.3 + appwrite/appwrite:1.1.0 ``` 运行后,可以在浏览器上访问 http://localhost 找到 Appwrite 控制台。在非 Linux 的本机主机上完成安装后,服务器可能需要几分钟才能启动。 diff --git a/README.md b/README.md index cf97c7bc8..578f3af22 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ docker run -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ - appwrite/appwrite:1.0.3 + appwrite/appwrite:1.1.0 ``` ### Windows @@ -87,7 +87,7 @@ docker run -it --rm ^ --volume //var/run/docker.sock:/var/run/docker.sock ^ --volume "%cd%"/appwrite:/usr/src/code/appwrite:rw ^ --entrypoint="install" ^ - appwrite/appwrite:1.0.3 + appwrite/appwrite:1.1.0 ``` #### PowerShell @@ -97,7 +97,7 @@ docker run -it --rm ` --volume /var/run/docker.sock:/var/run/docker.sock ` --volume ${pwd}/appwrite:/usr/src/code/appwrite:rw ` --entrypoint="install" ` - appwrite/appwrite:1.0.3 + appwrite/appwrite:1.1.0 ``` Once the Docker installation completes, go to http://localhost to access the Appwrite console from your browser. Please note that on non-Linux native hosts, the server might take a few minutes to start after installation completes.

    )4$;?@ceMWoo?Iw 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Ê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

    np;psAtt}bwpWSwqNg`!x&Pf@E(`Y*$Ev2 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≺B_ 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∋m`K!1)f_4OM+2%9;t(4 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

  • 5u0s@uI&CM?l zr+yCKg0v6Gm4-)007czWRmYPDgP}sa;Tua=t(hu-;#=H;7vsuW$4>yjg%h7LfTF}t!5dK)NvQ*2U#UBhU(bc zGUMCZn}IJArh`TN-iIb{gd1)O!Fo<<+*MSMj1p)UN-zp;6MIdZT5N5_GYXn#)d{hm z9A0^iz{+yX6@X0Z%fj1PzQEv#$<=#VaB-2(m$xd0Fw9Fu{c$}bW0gjfPf@*V6So(9 zZPdId`OYOxIL%_S_+g$5dLYj6*HcORC_!tV$XCZiXu~XpKCjq(-eJncUjKZjW}wht zw7AfEl+?H&`J6CpduN^ZJ6D*MiO+IHYx-E({N^>Yz(hU6e63m1qI5+B`C~Vm*Vg-Q zu)ppC-PrzL6`HbQ+ZUu&0rgQalqU=J8$U^eEYK6$Ki@20U}Z`*BU20IM7gpuZ}Wsk z`Wu@+BA3*az5P_VJhz&1{cx+DaxKDDVvLo(y#nE{=N7rdn|4)jM0ul6h<6=;l9idH_ciLh6yl?8RRK2>(x^0ly>_iQYRn zfW+qczsRU3LLKdIUdvXI(a7E3%5)z$snS{)o;0_IV|^xB^som!HJeryAAS|+%dy30 z1F4nGJ;W8|^{SrIiAMAPb?(t<=Kr9Zb(=DiCb*ToK!WMyU1qIptz1b=ZAJsOdyj$d z(Q`)aMYBsWqyu+;s_eq<*@6>A-i#5_glH+n`=N$*9`!{k#WagXN9js{w|?rWBJT@; ziXX`edL4fU+@J7+ZIp{n$5qG?MQFfUDM$7SyZ-2dKx}_&Q}l;OIGc-&9_qM7`qbZ( zs`^loM5i{a*ii{K4IB9RsR6-paCKlbJBGE8U6pA@9!&X88T60sU|6gGp^ z7HOtR^|{F7ko-_!QiEQSE^nJH4f31QxG3$qXu*JzZ0w{tjbeBu5u^rQxbGtMu>Z5)(WmKhaUE8KhFCZkVZ+6n5|{oM9d2CzYr3iukq$+-q!ZV-q7$tkQo)Q z)N#X^U!GA)cb43t8gywY^e^V=T>E{Lxbj@jH8}sQd%fMyF382QARq8v&43{4N9O1d zT4KK`H%=labXdBCAZUggq+&gVFWMSN1U;uMeAFneiaQIe_P6NwqF@#+$GA_dn1It} zB^F&3}9P>Yc2kl~w=mot@%P*%>J@+!GTMvS_jo0Q=)3Y#qp4gv)9pKs;6p6h_0cg`WgQ_xF2J4I28w)0)NnnX-91 z=5)o;Wiw0OH}r@rHGf|VNUQfx!Yq9K|1K}?$Lb?&|HFJQBUrgHX2y5P7q!EcLQvtr zi@e=_s46=m%re-Cn>c0MZk5B9PX}2`}S=_KGNknKAwPr zDvQ!C5+I5{)tkIrf5z9~6B1kniI$RL5-LK$glwuGcnIC+tjET#0yVIe*~GhCrXl1+ zD~+BH4o12lvHhLF;xa`$){}>phefuCC!7h5f}VFS+HTbalayE;ArER!|I#*Bf~c6u zTiO4panlWJL43wX zyAOiI(8V-@Al{-da-q~(N zw(s>k+qC?oC)vGu#&>n`3CvY~7(W&fc$22Ug#En30aVL;EYzeSC|Q1zC=c;y=tE46 zjKttoh9e}NF~sEE4>%;r>34J;q(@QJ2L+R$qUFQHV!p=(lon z(O)5Dz7D~^9SIzDz^48Z3P!%|+oSP}j1Wbw7_q`E6f7ECwB#m3_#p)mlBtzw{JIX2 zOZUNd1d34-c2h|KMVztdcswM_EpF`c19JB87k$w;-ehwGz!eb#<3xnH&-NU=;4RmmX{Dwyl}{oOieR zm9Yy6s+Qt?+uFsuyHaP$DG5_W%P|>^KAyp-rq^w8UaKPKwS-;Af&9mCJF@y00fJ;j z<3-E(vDFj61s!P|YzU0Tvrge>7e?ZZC+okf4Y)c58?9g} zjiq%bC-v6Q++#Za`ZSugz|(C(@lCFoR$makXMr^4*^adq0rQg9Gk7LR%lG~Axo;jrtQbK7R7Z#o^bA=eh6ciQ69byYsJo7Hx92NyBjm4u>8v)Vs`d`E{U zB*FqTkC5C`d`>WwPQ3!Dk8$W^Q;7>F@Ikn(F=V?lf2be_OclfCs@C?sn#>>2Wl6ogz17fUZES2vBete2V5OzwF4XJ|)zvwx zVp0y^uAenRe?Gbcf|NYghSH!NYt6t;te&LzlBj?r zXy$Nt9f~+#X7G0~Ag8(CcKZ4*dLSo-ePXIHGO!Lz-7mJ2J9o^drX_*rk4dt(U#$uNv^CtK-CE` zHxG;XQ9)ps`Cd`@8eEA_&L8n$_@BCuk!=_V0Rg)aGs9#LPow#U7p zyAdfXCKnL{@&`=Z-QUFMF#a$>j<_dsNE4m7d@)PnKzy*r@=&nR5Qgd{Iu9cRL~q=? zb!;aVDkgR6yhF%^+`3ojIRAc7*Ql3lv4^hqod)a_(s3shSwDR3pki1HM24UB5is7w zCM(}w=&`-Mbm=#O*J_L(#6K-$DGN)2^q_}bHgU}K=Fa?&iLfi@6M61Plv05W=ddk% zgpcc<(NDqe^&i1*)PL0&80}fsQ%Cf5#^BK$`8lrj2AE<_)b!8Hx^*aB8Oh$}F?8;n z_1Z5TxIf1a>mj?FNRQtF60(SR=TO#CDKEn}4nVE1Owya{Fawu7K6e68aaJES)*oqK zj)Bp;XRKc0kuf``&%3vS5i-{G9E*|szl4iYF&2Bt!VcWu)I=YBe&r>cZh0I6{w>75KQhKNQtel$TQj zYB*v@b51&j@f&Tq02=SpM{kIl_{m#%1vkgl+k#xvCmj+~cB%0G@wYTU;VH{&g zQDcui2r~yXyJvu+yvt;zm)C`m-x>JzAQ8M!J&ct296u-zrlxxA(Mo|z=evnu#c-vU zXZtBE>_d0|`e!hEandtmC+Yog6vK*7NBjq!JpLxZ|9VetO?gwz%3?RJPkClq2@xN? z2KKS=GsO|62qXL1=x!T$&-!6y&5oijvV33aX{Nd(2Jb51Q6046ook4`R&1OvdBrT+Eh!JXu_V`c}ndtO|~;k z8;jU2E2w>0?6Be$;=#gNYTkrLmOQes;nB{&B@SSUX@Xix?g^b#Q<4RWeyz#<1ei`# zZCqG>eQtskw!)^xnAVc#HhWrAZ{ZU9zXeLa+jmrritKuuTfH3ThFiy4ty?rA`hzd0 z=H^tLzm8fQp8z)^zVg|)=&OuC`eYr>MrxNBTLik9Npp)5DRJTmrvK+P@a z+fX0kf_1;tU)=i=HSbxZv;&tyo_sO#Q55p<4UKx}73JQWTHYcKc&m90(_V%0sN zrrFg+%l2fG!nTECy{be_H@f|d#=*@c-8d+%19j*>xLtmv{U}ZOEX@WsVm#w|jc~t$ zuRA)2V#-{(*9YQkgzBBY!-_-(`RP+tVTg^(yssA{=r`iM#J`6TYosCnGG~C=;!Aet zZ5j+^MzCvdMSU@?e?EeMOPA&G*=f%@tc5;wT#b>SHo1#Th=+0bmXZ%`xb-WBLPUQc zD}3%4xLV@2ri-;79`b(tn9KS*p>UF=7cA{!X8U^j=8Uyk&onDTb4<9EW8^;MC@(0b z?-m<{$Xr1mdeY)5EjB-*e`^A8f1yuL`oFK0*N3wNK8OAiCZ<}-^I53s+B_mjD5sO4 z?_3BH`SJ|24Y7*$sVB$U);6q#Fjyq(2?tplComB^?I!;n+lE;o&5%Hrw=DPp?A%&# z!aBo&K*_rVOc`qRO4Y3{0DH-UN;uBS%Br?LM^;w$D^MlZIE}Yvo}Rd4C#3)g^6Z~U zaM4(~e6Jf79%{g{?=9AVeN#`bvvErr4-%Awd>THiFpL-j%C%OEubO~pnocwKTtA;sly&NJ8)SZWW z%3IZhv9m+9Ap54TTDxpew~V6Q-S=$&raj?e+R%Jdijx*p2}RI(?Vd4PJ{=86ut6MB zR$POZdKhi(%Wj_wzV?~v7K6re0n2Gb#qKFnlPkH4nW{Dra+t7dL4Hj}K(7LM9=r}V zr(@2vlbT+g<`LemF1dWzL3P#-(;`k;3}oAdlfGjI#}%&`OJOX=8V{p z(VDu9lt?OPuqP=Aj}1EB=mR)BH#fKQ-MCTJqn>?gdz}M!??FnnIkVKoqiX2Qye}hQ z7py&ZJLPA1O~Z<5UPpDk^vL6o@J})P5-=!V0SD~g|N2PuYv^Bawu%%9m)qY$j5mV{ zIoAwSXnaX-AnRu3W@2aMCYSYpJc&0J_-c-O#_78 z=N)Js)gmZeCcIw9J#2O$5(s|N_Y!s;Rr@}tCSy-dQgfcI+Xsrkjt%gqAT6~FmES&E z@;Au`VCwJ#2>z2APDr$Lh#V<+4^4j!Zi$qj{Y~@%MDyBvc(?@W0ctn}?1?YON4Gx^ zs~B~?BtTqh*PaZOnX$L_lU@QP?hT(+H?X0i`boE7`Sp_V*!*_Gge#%RYVa` z?~hgQn>JJa_u&W6LXPKYdeXm>ue@l=DNf1xV_fQ6xKlpGL>kW|l_%A&0hJP2C(X$W zP|v2mR7l178-nyFDJkhK?6tR-rR6&SJ~=)e8Hovxh#02@UZ}AVQc}_wH$fZB)C#Eg zwpYu`uMIqN+@qKrvmG_M-*qC;NR{IN#g3%+f8={2>unE=}zeqjKblGdT ziZ^bmhU5;!JTPiA*kCHB%+OZ zdKL7X(?WA4#@T`(?2UkBs_{F}=9M@@1j#YmQL3I8z@+Gmw5`s4EV^UNIg7fnXMIw@ zZbiB99>FT`6F1TNp>Qn7>wuw%>f$bgX$)avTw(rg;x_@;y)oSu3Cl8*4R9BKPe|sm zoiKf1FCG8r`b{yWy|g#xL;C10+v_gddRbnq&{hSKNVfzXKc$*}+7pEM|2_EP|3izR zxe~oGI`D1kiv^V}{^QGg6}IM%Hh+S629lW=@6#FkvDRq`-OAdh`4TekN9r9nBSYFB zJA!I3tO&x)JS87_c@A1VVH$Cwa|sMDiw|!fQT2|$Ong2u`wVn?R7Y-tBX|)ZLp$+_W%|(r1394C z(thzO-iOIyRN9A|e;};@<0)oe(r7F@C+CX_&8YJmVR!xACzXhv>uY28=K2@KR`!Le zvfcKcJAV*kf;LAU#bSSzJ?ZwzcZ46sm=o3V=rze=$63i=36J%8x5PRuY33@=bZ@9z zgppVKPF7mR+7!D~2IAG#$v~~SvCMQ5y`@gj#=mIOE6z;YtJWeutGaO5|9E}KK{2Ug zcGGloLU*+gY<)1$uB!kZsTO;C7$cR14`^)l9h)XS8g#d);a!6I&1PD4wG_2jLL#$2 zpVc6?8oI4!e_Ubny`#o>sMMxsub_S$_HgE9v{Z=DGR6#c>{N!(-F7iRga5 z;#!Qg9fbHOD*wcs3G$$5rW=8KX#Jxe#N4VLiFC~1rs508B9bR+BW?8zYKnVsOV!a=HXlai{1xvjsS@1!b9 zR%UF@{2+T&zUg$z>O$Mn8ZOgq@A%9!HXIDHlxi+fft_ZSA@*0EUM>?Xo zK3RW=-lW_oU)f#8@xLOo<|5nuuY%?8-)RJiJoMi)$CO?Bk=fNa<`emT%+2pJ2eWmy zR>5%aCiprPWK2_@f^O9tA})$+1!$Qj%A_eoAZHOoISB9=K|#UwdldxC%zOu1ju4s8 zprJ~_ko;N1c_ze3CTl^oAP4;LAhp&qxjG_wU}G&i%BH_9yE{hKW<21TAD9T3bJA+C z7>xDj$`Gv`uhj$QuQV@tg53*hAGiT%>_6{};tfr*>ZiVaMf?TCh+A*twkQuQJcaTL}KP{Wt~0W6l)Ug9~m({?Wj` z*3>EU>{e%sBxNczy<6BR25L;@VGn)Q?FWeCC(?wEX%!X~XkH}sufI|XFDWZ~LZ9%O zY_HXGzt#2cDxLh1n}JiSNSbQ+LOC%&O_NgLw~HSjVgqn6f4kVHk_`WkD=>%STf~7i zM!V0bn@u9I{z>X$zXh@aIrfbz!svX?sGc|SObeM!I=n?Ktjx<33T-OkQlE*!IRGW@ z3HJmjf{oireBg^6_4S!u|!`KTh zr<D1)jmDHSbH$mL)-hoR|1EFE8(yR5;0Umc?^`?XR}4E(@S1E>3j?zU`_X zcU5owu?mNOD_BC4C)nCgg=zx0q2WQ^|9KGpagd-(va0{AgTZ%581ro=p*9oARSnXR zbeCgo3ePqS3)}D^f8(7fhXvA;r9N49asz}5?U6`tZ(-2(KQ-(HxAOPl(U0|XA04v+ zzV$v0q%EdaJi7wO(q_9VBxq^G&0IJ>HPpV{7=@1F_Ln4$+Up8<+0LC>O!=gzb|8Lo z3pBStMJ~36OoS*C`x9CEa>GVPqC3!#gr zn8(FOM)%t`PIGXkO|Gwp z%Fj+`8V2Oa^N()6>remjr~l8N-N9)$vVki(2-zEBB@hQDr48Lz4NSonESqZ6`xc75v#a8S@*GM@W831IEi{e?exl<^EH4PdA|iA^3F(1s z>__tooci7W$JSd1M47ekZ3s0c{I44u-_IUqSI zIUwB(A>9l$#K17$Gw%ETKI^_e{*dv}bve&D=f1D|y5n-J(2taV5`Oy}U{mk#SQM_i zd4!fW10iTUbG$MQfj|Hnf4Pn4$jB(GF#7tsx{mm#D-K|8Wm{k0)fT4J-G^MG+vtJ^ zjlj>YqjK#J+}lA@DaA)+9n4cuRZ-+St(kZE5E>x;vWC%ai{W z(FW<*bN@RYICMS9Oadn_KofTRa#%&9b&iA(fgc#2`iZ!+C$;W7*~`kh>)5S?WH5{! z=*(rz9(qZLHUMhq6<}PJ4`O;uIVV85Bbb7gA1^2*v^0jqWZe^zN#MB4{9&-ts!ydB zv(W!Rx4Fe9pLA%SS#JfG2g$*_(&ZXG_(51Jj z8iF?5tZk+~(`(b+);( zs=GkyH`MJS6HTaqLA@$1|1DjLJ6y{S)ykr(_aYxAHp`8GNa2#>f!=YOclCe%E8Tio>WS#u z?KkA}j7M6C*|DnP_|KV0ebGNI`R@sbt=9;>0y1l0%KF;F9nkB_pQ8f$B7}r3@3fqj zm6de@^Q6BU@i2sAJ3lF8XPXpj1K*bnl5FCip?xyrQfX{kP5wW)#o!=4J=Z(idNrK& zx!dF5hhwkO-OtON^L@<8Hwr{X&VcEae0*9}6!}?#)csvWz!fH&4G6z`Q!cEn8{E+t zK<=<}qgZ)1f#yCgruLx4}lF!+DHExc3q>rbS|RW=uAWN|)oj@nkFK zlFFq^O-Y+Rp=g6m+BaapGH6JdKR(>yk&xg5-Hl1FegUS|bCcJ^8Nz*Rz3y(Z>&oGq zoQ*W}OwLH9NEVf6%rrbK!uB$X=}3e+4jU|cq2g!R+mTbwV~r_N3m2+ zHUqzvY89w3R81SL$Wnjm=nKnV%XB}BX1{ZHwOmasXfFMerSq>lKdoO~J8?U8;yOa* zCxv$dvBJ93G$Ow9&1zqVDUZKSQuF6gdO#RWP8u-9D+lR-5tf}gncu#BOQ;9X%0nEm z#yVE?X2!;+J5s`gczMq-s+9iu$f^|#>9xXa?mu5nAZgni?Tsm9U_aN}>V$b-PI`i` z#C`%=c>$x&_x|Ms!EZ&r|4S?6?uU;q#(vz4e=>DKS}ie^j;Ztuc6*K&RcNYgr-oGD zRrbvF^jxN+3=@~#;KjHL%0l4>eHeE~g!w7JaNpv0aJamkq(b3Uk zTSz4TI$faG%+?oSAt7^686$T)6T)-e6YAYKu~}nHGo#r5#f4^~329j(Gj3)=+eAG) zJo~;zTbn*=XEED!<%dP!lkYP)**P`^$g{GFI*y$ka=2p7YbVnus>w9{--SbsqvXDU zu_+|w($?^sEKuPwi4GS_`hC;=v>f)0EL{xXk26-MYRPm)y)I)?V50S(y_eXao(tac zVSNJbvX!M&=(MqAX3SmzzNdE-C|X6#o^_`9cBeunOXG^e_SZSS%h900@VsbRy@!WK z#mKc{(&&v3bb^()4#{zo(@(L=n%y6(W1?1$gCZ7#kJ>Hl^=~ac$@-s{?r`3vbt(b6 z|E}M#V^Uyxd)_s8?YWHNi@V*oEBv~%0z5I$`Q2)!)?m)(=OY!!>#;kB%DP%tg{szt z0II6+V;&s)+MwmT4=q)=VUq_vvju#kig}-6qk$&KMlz*#Yf7i77ZMz+lhUaBBa6ZD zNZTqnonkom~+r1x(-;gLk zj$9dEF_wA+yW*j7Wov&P07|{Qn}ZOs4-0IQc4l zQ|9$7#xAwT^rx(UWu-JmEP&zwkpHMiKK(}$S+m0_lFqKgg&BCI$z3qhmF9aBb!-J9 zT0cOho>yEP3T}fDrxrISrv>Zxz`zTl1ez_kx=LuE(#ot_bEtLeN=`~hEk?G}v#kFM z?w+#R?9j!D*W)$E1z);0TfX=+QASb=2nJf^=;y|jl}1Jt7FK|I9D2@&qZnF5Y3~)# zJFI?m1q?x+aluMz3q5&o7k}X~8r0>F>b+zTiz7)D?JJ40+-Qwz2KuQQV2yYL5h+J zBnE!CdZQ$qqMUp07paujn1}Rp6_s-(3?|+!Tn+VJvN(7;hyg$j45xW~q@Mpp6{8Bk zn|ysK6*#35IN319^S4ebe=siVQ=_Z=#5`G^eC@)2PNUo6*Ev@=M)%&$7@;}MWbvxLx>_4~%<>x4 zJL~EChEE1fGSbrWj@wj`QsCXm2?=mNzq3z4m7UcgP>C5aCRIKg0jWSB38;p7`B8aH zG)C=nC8I7}5M!*n@;M^Mm9_;8WFsWOB88mM`D_qNF+{c6|;md}-Ed{9p^u52B8 z&*0pe*7xK=uIW8|Q1L~3bXk-uDSy=~1@|+4>Y~WPPF+PB-BDSkRF=`qunIjNAPowZ znXg||l!xxOcsNb^M2BP6sjE6Txnh-qb*19U^m65^>oWSwcYJ-h{$vUEdp|b_e}NIb zPq!sn9K5JG#hOc{k}8=W8z0|+Ebm_qIi5i6Q>D~G*SiuWU`2itM0HgMZ^q*~gdSvQ zf3aMdbyOf`SqAwx?R?N{Jibz2U?lZ-4ru%AS=dzb)XBh<9&T#V;K_Z)ALu{xsr3sluW=2pa&M!Aq$gDw`n- z=x3u+tslx+8lKzcWi}M~P&E~mcu?)$-``If=h}bwYoM^GD0v#XrsNzr%Zo$vP?03{ zbpoI-ORLqHk*4xmX++oOSxT@kup*LAzcL9yT&dyV6w>iU=Y0dqiNfbd0wlN(gB78Mly zq%#5c=0gv26U(*04-_hS>cb5E^QI2!m`jG)8WwWg%T78uXAR97?a*Iep+FFD0SKky z4k|t}ePDSoA7mX{nWe>nb}40xw|*&d1KfBAOZ0Gj7!A!7N-v{WjM%A_P0Ndwj4K(HyvT-(_FLc@U%z5!0 zOsDzNsM7^nD$cPD1w)vW6~d5BcJe15M@H_(mR{l5WgHqKvROa9gkTE1sAM3w_FRj( zP^)w7%GC!P{;do)oa`Idg&q&OTn|8Uq~~Whpz=2zcJ#&(LhgnOXBhG>o_$X65g!F= zS=IX~p4%w_g2~wNGpBxiZSF4BdJ&JhDy@Q7x98jB<${=)?zyJOA9r#|-k6Xy-c5kS zajZ*LB&+wa#xj@AoqQ6e5^kG+9j$}VwW;Q4A1f!mYs~`$%PCb%6cl-K3E58&r3FOAKo%J=RUQe( zbZ~)YG@4?wH*btCcF6h=ly*uY>L@=)YJTu1OtZXMCk#*i{F7&d(#h~AGJ;_)>s zu_0wTpbGeYSBg08tb{il%`t6CMWeX_SCXyo&r0>AV`WLd{`X@4`|AijbKIZ*{SEm3 zR-W2AX$B|N?H&78y#1WBO~Wy^mzJ~qb{Di85wulMSntd{;_Fl z_Jo0xr-9>24Dq6jro{24rI;69mhl^&!^!j5?HN$EW)bYjAl};U8#~fQVpfw9k`6u< z+h%bZ4&^VEcjrxXWYao+pZu}>YWdueFH77&rv?}tF7;l4v;@st1e?!OZ5b%?+`cA~cMMWh@I`6d(@@6fbs-Hz@FE8_|4L-n?@KIEl7D#NpO0iYVN*v~ zl%c-aJ1?YZlz2SbGdtsp7YkONZN3`JId|9cQ`#1Owb&K3FXjDgx?Yj{IB2V`q~tO< zi;Y=IvBsX{UL31It>KJv@u8uiai$u+%vA_wmySO~k*8J*9W(^wIX7z})?clqhZj^y zbLm#J?S=IkR!(vamwt{lYfu)?L(xB5<+& zZ)WSqq~=D8)3UX^hI&ql!Q?EutHMdC(w?P>bZ_~03)U+&b?N5#`95Py{YUQl8tP{QN(gZS za6A&z77p1b`^K)5lam{{xqbO!H!W2lZ=Vny%27R6?YMYxmGf-tC}%%N zY=zKM&Ky%jsT$$9FK(beNA2b$Yl73+-s)p( zNE>n?^Pu#5XS!eGKlWN%+MO`~N=a#1bi2C zwghS>HHd;Snvlg7^pJ-q9i_4FU+jY{3S`Emq&(A5NY&Fo$XgmKsN82~uQnYV8h!x2 zK@Wfz(7Xw1Gag@4%ASLdg+pRF_|T^APvXJ;w*w)?pzV*t30ge&;(9?vLy7_y?`dNG(pmhbXfpT8A^ z@Ipl`A8IOZaOIlbkWN^*%2zos^DN8Az~i^QK6PsC;#K8;UW30>e<+xK3v70wRv_OX z&uw76JfsEm9RB(?qI%{WPRMhw;Oq_RGWt79XRi33y{8kA9*X?(<0x%5r z0ck-W0PY5}PV*Qu6ien3hpeQgw(pb~_*@>Xu@UVM=(aE$Eg>8AsGaEWIQ;gStg6{( zq;S&4Y_zf5-@|>#%ADI}XIo_-1CK8C-*crzVs!Cg-j|1Z$|G>Ng1g1ER_0Y@4L*`X z>JyWM*Q@I;+^h4_l~S*WJx`<()Y+h6zm`*ctLEE;QtYekfhYx4?ki$xdSsc{*J%6kDV&Mmjq#D zt%50{oS!SOP^xgbAMLHX5r+zOr$^>2jd+JExc3uNx7VOxZ&4jIcMRAzbQ zr$0YlvCr(Yqx^k+-gmw+|MST$YC7%Ot`)04yg(B8(N}ffKRB;s#UKs36(k@r159Uc zoa5x?=5D?74M=q4bq59pY8imC)|Qev_)RXoj~+j|yLIi-ATc4%faDG1DK9VgJL?Kc zommOBStXFhf`P#KdjzIj>wPdfT5f2?QG1yQBOse-{Y=yz&)1pz(k6ma$F$xHlXMP= z*(s3$?x59%VBHH@C0Zo(mzQC_X-n(6I*zRky}>41m)@LOm6VKZIq)3n30s}fE>3&A zJ~U)Q9PT;sx`aGpuv#i1JpzuS=ab8WxzWPABQU^|8XMo8`0*jsinMG4O1`vAA7c5R z2yR+wCENBT;;x*j6RumyY~jP#@|^OAwCkcT$F$e~_13z>kN1<^`@Z|2h#~u}0nBua zH-uj@NLxQR(7Uz#C{kH*&1V7IQ$HlH2GF;NixNaA7>(@L#dsoL;f!+jg+Mqz{d8qN5H?oz!5K#q?er{Uq zDOl{M(1?wGsr_KTeb087t5$R3J8%E`&mYU9%R?yoy~-nKS~c0|q^?w7`p&1CQvVbe zN_tsO>~K;_z0DEQ|58r<*62iqr%TOx=VZy0`TM&ne8PNuO>g)~>);l~PpF~xm-kVz z30qHZpX{W?QcFXS4t{86_oonv}CVUsek3y9niHPJaMs)Erh!tV!pnf1 z4M2mr<__qsEqn1wSOFIH#Sjix!Z$FpBv8nO55Z6=EwW+&rpjE?YH0^87b(Jj{FThA zCNRG-;R(intZ#pb?y8#ql;JTI=wZ8B@EZK@KW7+DI5S0ok!|o_UZ$>TXxJSXjtM>b$U=DtX<n9i;ZCA4uayI7zuIYF30_jy)O8#bY6CKUUk}A8ZtZ_w!>`X+-~)FWqV&q1+C3P~ ze2!)nPcZE}eF}(RegE-8Ir6Hi|F+IG<(DQ|jz+^YNnaWo7*_dTJw0OOvd>wILtJK9w3yrF6?ubyGXA)-&iN>`V$bNqpT0he$o1D+Zf7gww%{i zyu!k{s8OykI$@3Rde31|*DPO1LLHbrkMMDrX$rj8DF^gvixeQF`I>`s8WdSAFR6i3 zti<2SA$e|dx;I0%Z7o6b^YgD&I7T6{&jvxG&<%F~=Ri`K-sEY&bCiPpIlo}R^JvL2 z{JGy2{+8ljz)a@iK=~`F`l5UL2|dhk_ERN_T&7S>P0d+hmY5LpG6f~B<@Z$i0%0p2 zMn-pI^wl$fpC*gd)96lDfaqiL2tT$B3C%sX@y(WDWy!~%1@@_Bj2-g-Fx_cLjkQiZ z-huNU`dX8(xs(j|7_7x~l>57|ChimNV>n~YDA!d5u!;O1I8z2`@SC*EabCS*?%T|e z*g8OP)pZFnks#OG#sH|6+gw{@oZfcy*r!c&w)M$YKp&xz_;`a@PpoYt1ZaqPaXh?b zr^Qp^}O%& zaaO|G$ZO?b=fw3I1SR<)Mh;KjLlP*`SOZN{?8+=t^c#1+vBr5FyRGiu%gD%>h%VT6@L1O)5eUT7m)DeP1ZLpMEvvwTuh>=-zBHGb zv>HzXoL0IqheqhDaDd4En`uGfe^?p}Xr=l9yx%}e?+y_CaRWo+uVX=x-4Zq^i2Np( zynvy$jt(4$!%3Nl^Dn;+A`A%ixK*y66ID=T%hhJCeX-Y8=r)kR5M!}0V z>>rQbUL>C^|2cDgM3a0{X+Qnv*q9E*LH}Q0_orY}tS%G@S{hW*y%$xuEcOf3D8&Yt zqOBhL1Djn+G6eS{ddI9B6u=<24jGaC1p%J=+KKzUPxU{IIJ;jS&9SJ8eY7{Wai{x& zCo0KttmD>E7Kva{%cqqHu1|egrP*vY-OS6!cO7vlG%Tz^Coq8Ya~WvtqB>Vx#Rxt* zQ#%ILofiTEGIt`M@$AN9;gQ`iTWuee?;{_-Zd}M<>T|bJ^_L`i_l8Z6Fr!)iY2?7a zbIP}F2g{m|zWmxt-qgYEfxa802W$XF`^XQS_fv-WzNCDXb&yj ziUd84BQ-S3tT=eNfh^#jC7wPlrO0KmmDS7Tk?i%|T7%zQDV_Wudj&qOUp}Pz=M!P} zY+KRIhi5k}?9vZBB}&xJoLWzUD^f3ufXc6yPg3F;0~V?w7hKMesD@HJ~cJgi3^kj1c5OCBUs=C#8!d&L~c*v8)Wj&&x)D3!!P7b zOU38)+x&Ybiw76WWbio(mGZNmqb+wf#@sOV9;12Kb0GTa1X8Z40TcMqbOjgPDoCwD zKIyYcWfA6Or_F-k=Ls!o%#H~q`fC}P6(!}Hsu~+^B8_FN_y{Q|^Be>iyTMg`NFA}} zQ*_s@bZMuz2@VYBqd$P&AZdFq3E~N=sNv-|F8GO!7vmKVm7^R}#o03?k7RD+8_r&k zgZ$~D1}uEz6!F4seS%a4(*==#9SgczcdRXsN?B>qHRceCKsv?=MLx8e3|U4+sxn0| z9qmM!NeAy!T~rXNUr65kY73~eaR*_PJen!r6b?xbWPa9%{>~B|73IbwkDEPQ;b5OO zm3)6fts5T~_c6eMctRKnfW*{!?%S|<0j;-)Rp{(QgLiESGa?1#Oq+H9pU)@36XuRv z8FW)E1q^K~Ks|LJutk8>zIuuYEWuR6geMxnGD{y)H1s-jaX?zzz~Iv4r5L?3v75l% zqX+vl5lAhKemN6G{+I#0z5Qpu^UF5BFZ7(>&BA}46!o+}f>>UBO;KZu-v}(O`V;X@ zrm3i?$e-7&t4Tsn{gYNIP+y@rzC}7J2$gJRL^H@IXc-!YzYFwG-7f9?{#{D>p@jkq z|JSE0*cxN^H*X+-reQINoloZoh@VH{gVT6-gF|<4p{`|}r^+CbAJ=wzW=qfsVlJ4N zR_YOGaTz3>vjpSQ#&BI+OPb8kWtJ9o*UoOqrFMG`eXW;Lxq^c9^9GP%GVLra??Ymk z?GLCYsBGo;XZ**BQ-qru$IJZe3}RQ!0sF0Z(8eBr(0yXor+xg{Nmb=H{_zyRa2y8t z%OczuWVF?AcE?&Ro@4dQ64SSOom*j}L9;a#GrR3e1>xm*iLliNoVVAp3~R z2R@w@mc>EM-kbSSm!~n#x{oz_cX2IcKg34yp|%+C=2gLRiX7TvZkwOt;^IDU=sGA& zP0h_^W(uiLwsQb1{cQOmKmUtyusTim zLs+7-IEEJlB_$0z7yGi52J4%fWmLFscYrUy7N@b%F_6o-9;2sW^4AR&9(G-Znbtu2 zjK%KMDxtnOa~_t&f)>}(++`lfFkkII_xjYSua`;?|K#9LJ<<4T!1<|%C6a>D;aiC= zSG8$fGi#*4+fJ-;**m@ooVQV z#l`7c`{v-f`c6u(gN1zW5z6_OUe>*_!wnMj+g{=*on?Zpp&`mIX;!ixS536(5bl)u z`1rPM41)0c>29yPI*E=wG9rPzC5!bI8WB3uwHH1Af0w_N=Dn{!ZLs(+$Qher< zUq|8$Q9Nu8?kw^wOJ&kczlE5=7@MY6&tim+`-|HM|AhqZGm=GY8@Q60W`Fncr^o`t zgpE?h9~Rq+ihwbE5Pz1W`%~oMRDl#{-<^{cxrbIw?oH#YU4NyUW!R@MV#pxrL&s;4 zS?syH6e)hWKIZ}}QV*TE>Ndqso}g7GmcBMJqE)B{+%-cwnuSx_*phMfHf~?6rQUOY zCVU0>g$K7^q_U$k2b)i9ChOumI!O2ZP1(yFG>d4mY9vm(*}#%+;rQ4q%R~`uG<$Al z1#>J#E^!Q*nF%)tsG9Prtr;>!K+K>V0)sQp_#x4A@ZYz#Helj6vgOnF)3msx)BD>; z+b2g@&Bs16`kxiKsw*oY3D$ip{GZgjL8P&Dvc2tKZL?o^1|XCG;DByXsc_{gKyW>u zS^#aVU*p8SVt=?jUs787blC{at>2URTI4?2#ayk-cfNcJqGNv6(QLVoheF5tF&ky?7?cN_P%Q98x6Y}r8BP3SoTlk`0~{|*yo$kQkzA1ig~^)$2~ zYe3Z+UteU;g+c*H;M_MU*cndt>Wus_D)d!(of))TID>`ooI^X10Zs{WDw?RO+1lD# zX(1f#7eb%Lkkb-@aswQ$yyE-?m~;LXK)=jtUsJ4Uf?D<8A+l+nGsKAJF2^Atn&7QC%-P8nJHz?f(wIoCr z&C}5&0{-RD&f(4?0PP6{cpYu+3nbCoCOC5c8MU(TqeoAHE(w>p`V7FKfX=yT{B;JH zrSHwbH%(q;lvY>Y#(?d)5zZ(X_Ox@tM$kzl`POyPwZ|HQDTzRv;)egp8WquaiGq+b zNay{YS#n`P`2Mt@&$FLD(-X6!ri$mk z`I7y*pJY@7Y(&+!ZS}q9?va({BX_WUPf|ZW|B4!TIYM$A8=Lp$L+(N zLR;@uO-Wp?8X@T9L|d<~={eW7gQC#rAWYn2_jAwcw(t#-KJe7+K-ZXThYs88n&th$ z7lr_N$Y{rgBf|CbB^~DE*H(dVOnY49xi<0$j9PeEAnJ4MHn0v7^T-BJR!ANiKd=o3 zU4wkwJZRS*B_&rE7L0#nLE`kZwAcWF&DK!gVrBWg6KH*g?hMSu-EDUE&~Lt~WGVI; zsjsge>PPa$W;5i(6fgya6bWjVRD zG;Z{~-snE#czBd0AyH2n_M#rC=FPV}#0%Q!y6cBf!xQ_%>4s`keNw3E!y4+^!CiaD zrNe10U+DH?f3{qH*Grp{MAL2)R@#rAC)I_8*l}tV0h{tH0a;^-Zhez|md&DL|ejrt^GAG>skn-N@e4^&VFUrsIQZXZfQwK_Y+8)w#FOU!sFD87+sE*H2;*XM}?08O6TJ7f9V5GSD zxkfiId7OX`wyL?Y903OWidWFtOw`=KFo?QvjMur7vgA*3-T;ufsiIk!G>i0d7xK_7 z{9W51#sdzoqYQ-QnXD-TYvmOc% zrF|o_`<-2TEB@Deg%SRZW^b?F)I4APT9q&4D5Gl3+gi)TIZH{2kF-?Tl+8*P5&cXr zwCaby&DGZ!)pn>OZTm9DM(pzSgp!+=Ul49J;`D{Q-y@a4=z9TVl|+AanOYHwv10ApZcxaS+~qd_onk7+b*ZYj6fZ+C z-QCvOqu-M2Ik#1Iq#+Mf4aW6Y5QU>7n8sDJ)!stQV(HFHGLB`w5rxy16q=e}9$BqU zIdu(39wKb9gaPaM1?_VEr)t!1iNi-N#N>wmJM^S`@Sb!RBu}Qu!A%JMN%{z5BTPAY z6AAmXqRc96%lN=WBog@vr-PgH#9CKS4;E8Ha)v#U#61NjhhNEwgW^J< z5{#3&rW9jV`UF8^{rO!m&8N@6#kgwR$%ttLHax>1K}^G!KH3&`grTo@*@F)o!ssZ2{DY?X5;Ue(j3M#Xvu=H#bbEPH_?86T7Ni;ij+}(k z?yXne8nE$1$|PD#>QVp>?y{Bq+&qZi>h!EW%TF{gG=#1c@yEDv>tTxO)`mE!Zy&(iQ~k{SVjVvUU~@(Ka+F1T+5P(z0-x|V;TK0(H5UQ|C>sRB*@bU@VLoo1wvsc z1IVk3Y4%=-aq43$CY+%JWJh<5TiG8fLhK+2>;2LONV^hcis!AGw1#PiguANzXCdX^vgVTVnA%? zRq7A6Z$-<%fI4(*z=Lx!N!Sr$4#?q-mwbOkn{ETqoUV*B#?~b*QPh5Zf%{{szuSpd zcL2*?d-vq8uL1`yiK;h!o^8Dnjn~a!wtZp4YsGC#e^xMTDr&-(!O+cnO-HcQh4!ni zqzuFm$2qDNAB2bOztGJ$)YV;Orni*Ld#K&ty)d`HeKH2^VW6?T;;hEw!(?mkp{s94 z`#}?D(|<4~M7h@~=v)j9;nKj2OfEoF)zE9NDZTWeKJlHIMn%>7P^P_=YJP$ib7wQA z$@T}s_yYEg@Av)urSPX3l6Mos50Hs#v%~8AYObgVyvU`|y8E7Q1lq5ix!wTluQpd5 zznmm&SvIOSGb-TMZLM_}C0=Zbk^)YI5qJ~eDE|I7#R^=(?B0ae;DRI%;6aw!ZoWO*4cwuZYdvpUw+j@Q zGsXcDPJ5RKDh5}RBw+@=thL}41+uiZw$^%l*1KrV;qUJsq?(iQF1*xx6qZH`&$B$; z>CZr%RcU|}anFT~*>CMC&QMTtWT;#lt5!vDSM^=39NyBBE=Y@Yr#!29#8Y^8G}gs8 zymWZ$QVqbtgu!*0!n;CrOR^7YgoA9nNYx{x&D}KaA^w>^)e3%+_GZH8pDvB| zXvv7LjlmT`rddS<1o=p7H0v{C1%*Hs@>uh-6*-tLG?0ZKZJPcC6lkTPu#fnv=Rm|` zT+1XE*5tEm2nJAH0G?&gF=Ra{A>pccQ?t@kjdT9WA^=BQUqB5v1LRronaPonh@|T3 zYPSZjLx*9sCiLdbnx`yCNUf!8Z9ljz*4w2#~1T_wj7j$yby0y6iuA^axmqT z*Gl{y2Y&5}c(r|b)&NdcmFv{qv6H=O{S23_GUU5D-15<^YP70-jy6n_Cs1`r)*4}r zGWvq$9d3p$>7z%pM|6f5Z}A0B`_Y2asjj`Isa|Ki_9|z5H7`fLQ`-7ElI&&yh z*sdPGx>U`&$psdmRXE@Cha0_sFkf<6Ivz@HFJ@rEWi``>EIc^TSXTH~QIvok- z8r>lGzy->*fO4Ty8b>fBUYQU8HZ)zVV|UjH%%TYiG+A$ed|7kJxZy0zu50cQM)FxO z7bYuQXPHb!0q4S-(VNAIgV+EY0(5K5Y1Nk8J-d5(bftyHqh@h;4FnCP{+CiniPw}u z8}3;eV{fVk|DT)cKB-}exl7qBHIacf@O0;2m*=<_t6y_F*@vnhYm%S^#~Q1t#Yu2A z!Zti#ZxeT2UvEni4cnFsiRn%!KPu`%mg;0-d%^Z8B2#JDqw=e&biWcv|96jslIH9k z8zi_Bt$n%~@uDBP+9I67!W0jdu0#&AJ^|%g6sQj-s}k{EUUjEH~$b-PKMA?6SSKssTnp!=;j>MV&m3_^fv_lvDz^bgvl zO}LPBVT_Ut;n!GIKRnA(l^NaE3#KPDu}btVyVRE2xVThO2jmiB7F%vj0SfUG`YsX- z&E^0KwJ&?h(@HDr*hnnzgzo%N$l$*F`a=9#MT<*rYtceag+anGGS?7&e2-Ql zHJnc$oLbb{L&0AbU-uh0w|@r;_mw2|kD|%J(@V(`pAYUm^mL1ihZRdLysmQXw=8DBsM5wi{;JXIR^GKoWI`+MX8Q zJF~X$+BZxutmRUAyD>uZ5NG7bhe89P64E^< zy{}bP&8z=(oX1l*-@l>fuV{>TcZUdydLtJ49*u%AIjth1vCi9r#XkI%oZY2cp4j@E zz68FlIXvE@LjNLNf!k_fRSjSvX&!1X2?6_XP04aI6B6}&7Y`^AdT}dbG#M3x6NqU) zUtoTbIs?oBJ*5*zG0um=XW$7OSc#1|sukQ|zNYVFEinHQ?QGWu`21+tMyrllGhqdj z6k5gPg=KJ3?as1^?hvt@R=c>IZ>f^yL7xEXvFR$V`L9ZIgf~N_c?@Nt3nrg)uhFJ> zjAkqt)MHjI4x5sy?^2Q{3|jaHxH@Q7%&Hmz^@IeKTSubobXlCl}Ai?3I@=C#T%#^^7x_2@PskP*HGKzURo>I+A5)dCRfn|pW-(lS%$ zBq37Vi`tgf-TB?^yp8p*6hdbo@ZLlXdpviTmA)Dlsu;&`Q&^`#l5zdxpTgr#?H9~b zzB+*a{^5%*+k*b7OWrFxWjUNLuk4*ACu8fo3!*qKP|xvvq`u7BA^lOP2Q(1!Oc;_d zzziqR5H1tjbTAaJghUGQyu@BUs&J^RnU7TK$7eA+UhAr6B18_jyQoDegvx#3bSX*B zcU~J7RR{vLlycA2p~9anBMC_u>1{l2^^r@T4ag<70U9z0$+ez62+i|G zLAOxZIoSNYf}oQlSWv2CnaZR9Rnr28pnHhy16X2t zduAhmDnq*k`XSE!H8ddcxFh|9!cLFLq#Vey^&ErDgGVcEV`J1G0r(%?~5;PS|Qu zT8Ctg*9P5cjF6dABR%qQ%fjh;K zwij)O-StI=*Gvr!*46|+ccUozyhTfNeP+G+Q*7ENdc?j+95bd_W;jm;WJ>-ysu!de zj&$It%?W@uO=V=#PA;tBD?RO%%biCxTV01L&J}PO@*Uo!LJt*;VsbSvj2#@_)TB-S zW-x;-Hx-UDVbJ{&)-803O+?`<^e>tG;?PRDMp>@~e@sst};n zG<~n~vpvItx*BRw98_Ac2zZ~7shDXC z2V7HO1971<(+zP@*f*1QAzWU7luz1pT7vZtVqf6Bl~5+j`O#zxa0H1^oX=9 z!Pj%a*tRyqg94C#*l*i3Yfutl^wj@est`FX4IeKb;8j+Utq+jciJ^d<9L;z+8Hk{| z&4N%4 zWS*_At7t;tb(3fI)-mY{ELjY$Gz?;Hp8{EN2Fia~m{@t+(KcAVS9lF16?&c^=7n1X zEsfFXM!v&qrYnn$WP(%)aQ{<>72W>@xrl_qL zz;24F@Wr!99Q^bRYcW`9Zk5<8wG;~;1h&L75k$WuQ?|rC+g4MAhds!XrHfUJ2z%~X z7xcUJN**^#a^-k7Zo6l>r#pI)5Ib3BDd5`M#e^eH!>a4}J5;45ydZMFdjw)u1IR@7H z6xWH|nC|kuBu);DWOyAFV+wX{&?KkC@fbDQjn5s#h-1%m`TObeO&XkN5A8Y&v^y8A z949!su$Mgo(Jaa`m}F#N{EKuXdX$7_)?Soz12*XB%`a{UW$O4H`0)R7rKD%YA;iW9 zf7Ytf@f?#y9I5Xyri;Va*20bR9+Ww@;kk~Hh)}t)5)q-pv4Biy`?};v0oPR17%V~; zWwW!s68^H%$fcjmX0RBVupzkULhCo&;zHZ)NpG22_Ht3+lwf2^XhZU(IAi8mI22+# zb=tvuoU!q^dT%!;eNQ?FLOa*Zw46xXx?iWSBDb8?r+~%C?&e}G#SdH4Jx0qPj%G`a zFZ=YLTl7l}Pp;SVjh8Ni@~f3c))uAY#P&O^Of6Vi)eC$qj5qB_Sxj|8a>pW_tzJ*K zP0l$p`BYIK3uk7YJyFVD*21yla93NquH833;@Fa!y;)SF3&ph0B1A^addFPgAKrpj zaS^;I+W%VNUo`ShBF5vwiQ%#@aX&=6v$g9#f9TFw^xzlDP1PPsj+9kJZ2kX7I^le~5_7zZ;E`jq~44)a0gr!pCU4m+pBR-jtj zYB6eZ@J~cL8o?@ahOM@YkUnvh?uAuTJg4A{YT3+MLWg2uDs=Q7p`TfI!s1qORkxFx zWFn2Jw66^$v7Zm62l(j1RL%rbNAD~npK5C^ly0s2#JSSuPc9~uqvAsmt3TC?(jeMH z>bwCKliGq=j+d031|;3OR0~YH#8`u24=oN#w!zKj=Fg2?2D2!>#kIVTy~MlOH|QPOvc5 z7UG6l^C9V<`Mn#`G$?82a8j;^t&j05C_qevzV-B| zYnpJ}2(4dp5|J4-t7`xa4{R7R6~5eg@OPVh5YQ*ZfTj>d%O>37g(MC%k#gps2D8A} zuO&L>wTfwOX}a+RX3Ee2LN6nsw@VX+f068otjcZA`Z{#~V9I4XS5eJaTSX(dyl(Yq^i8A$Gtin8$5v}-o|?kT`%Gia>o$+TS^WU zv*qkO4y;xc>p~J;BdyI`s*DmPc8?e4#S`(oTXn2+wpn3kP@&@m+Z}FZ{gz%&)?2hq^x@yARYuxM79l}nyfc_Tvx>?Hp zXlAf&KQp$qT%|p0)7QrPQBU4?sOq|8ruDNOugPyvWyYgt!l-Xm&zOj3^pOf>TW5N3 zoY_^&5v$Cj0R_Y2q55-`CGH1|kKAro9ex=tC{dX}hE83d3Plu0D{59nx*54Vx9&eQ zEzc`V^__B)7*_Ehex2Ldr0qTGoF=cj0<-IuAAhra7|Yr(`I1$